Google Code Jam 2019 Qualification Round 亂寫の解題心得

反正只要 30 分以上就可以進 Round 1 了

pA 可以 WA 到把 Penalty 飆超高我也是醉了啦!

pA. Foregone Solution

題意大致是說,給你個 $N$,請輸出正整數 $A, B$,並且 $A + B = N$
然後 $A, B$ 不能有任何的 $4$ 出現

一開始我是用$\div 2$方式去做的
但沒有考慮太多情況
然後就吃了5次WA

後來就想說$A = 1, B = N - 1$
如果$B$的某個位數為$4$
就把那個位數減去$1$加在$A$上
然後這個解法一次就過了…(ㄏㄏ)

本題 Hidden Test 只有 1 分
但$N$高達$10^{100}$,就直接用 Python 解了

T = int(input())
for i in range(1, T + 1):
    N = int(input())
    A = 1
    B = N - 1
    Run = 1
    while Run < B:
        NowE = B // Run
        NowE = NowE % 10
        if NowE == 4:
            A += Run
            B -= Run
        Run *= 10
    print("Case #" + str(i) + ": " + str(A) + " " + str(B))

pB. You Can Go Your Own Way

題意大致是說,給你一個 $N\times N$ 的格子
找個路徑,只能往右走$E$跟往下走$S$
不能跟他給的路徑重複

就直接跟他相反就不會重複了
他走$E$,你就走$S$
他走$S$,你就走$E$

#pragma GCC optimize ("O2")
#include<bits/stdc++.h>
#include<unistd.h>
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int,int> pi;
#define _ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define FZ(n) memset((n),0,sizeof(n))
#define FMO(n) memset((n),-1,sizeof(n))
#define F first
#define S second
#define PB push_back
#define MP make_pair
#define ALL(x) begin(x),end(x)
#define SZ(x) ((int)(x).size())
#define REP(i,a,b) for (int i = a; i < b; i++)

// Let's Fight!

int main() {
	_
	int T;
	cin >> T;
	REP(i, 1, T + 1){
		int N;
		cin >> N;
		cout << "Case #" << i << ": ";
		string enter;
		cin >> enter;
		REP(j, 0, SZ(enter)){
			if(enter[j] == 'S')
				cout << "E";
			if(enter[j] == 'E')
				cout << "S";
		}
		cout << '\n';
	}
    return 0;
}

pC. Cryptopangrams

應該就直接用 Python 寫,不會寫,ToDo

pD. Dat Bae

互動式題目,不會寫,ToDo

總結

pA 跟 pB 的 Visible Test 過就可以進 Round 1 了

另外兩題等有詳解 Code 再來試寫好了(X)