Div.1Easy修行
FoxMakingDice
NとKの大小関係で場合分けする。
その上で、3つ以上N以下の数字二つでその数を作れる場合の数を計算していく。
class FoxMakingDice { public: long long theCount( int N, int K ) { ll res = 0; if (N < 6) return res; if (N >= K) { for (int i=K; i<=N; i++) { int tmp; if (i%2 == 0) tmp = i/2-1; else tmp = i/2; if (tmp > 2) { res += tmp*(tmp-1)*(tmp-2)/6*2; } } for (int i=1; i<N; i++) { int tmp; if ((N-i)%2 == 0) tmp = (N-i)/2; else tmp = (N-i)/2+1; if (tmp > 2) { res += tmp*(tmp-1)*(tmp-2)/6*2; } } } else { int dist = K - N; for (int i=dist; i<N; i++) { int tmp; if ((N-i)%2 == 0) tmp = (N-i)/2; else tmp = (N-i)/2+1; // cout << i << " " << tmp << endl; if (tmp > 2) { res += tmp*(tmp-1)*(tmp-2)/6*2; } } } return res; } };
PrintScheduler
やるだけ
class PrintScheduler { public: string getOutput( vector <string> threads, vector <string> slices ) { string res = ""; vector<int> npos(threads.size(), 0); for (int i=0; i<slices.size(); i++) { int nth, time; stringstream ss; ss.str(slices[i]); ss >> nth >> time; for (int j=0; j<time; j++) { int ad = npos[nth]+j; res += threads[nth][ad%threads[nth].length()]; } npos[nth] += time; } return res; } };
BusinessTasks
やっぱりやるだけ
class BusinessTasks { public: string getTask( vector <string> list, int n ) { int npos = 0; for (;;) { npos += n-1; npos %= list.size(); vector<string>::iterator it = list.begin(); for (int i=0; i<npos; i++) it++; list.erase(it); if (list.size() == 1) break; } return list[0]; } };
PalindromeDecoding
STLゲー
class PalindromeDecoding { public: string decode( string code, vector <int> position, vector <int> length ) { for (int i=0; i<position.size(); i++) { string str = code.substr(position[i], length[i]); reverse(str.begin(), str.end()); code.insert(position[i]+length[i], str); } return code; } };
grafixCorrupt
やるだけ
class grafixCorrupt { public: int selectWord( vector <string> dictionary, string candidate ) { int m = 0; string rstr; int rpos = -1; for (int i=0; i<dictionary.size(); i++) { int same = 0; for (int j=0; j<candidate.length(); j++) { if (dictionary[i][j] == candidate[j]) same++; } if (same > m) { m = same; rstr = dictionary[i]; rpos = i; } } return rpos; } };
RabbitNumbering
やるだけ
class RabbitNumbering { public: int theCount( vector <int> maxNumber ) { ll res = 1; sort(maxNumber.begin(), maxNumber.end()); for (int i=0; i<maxNumber.size(); i++) { res = res * (maxNumber[i] - i) % MOD; cout << res << endl; } return (int)res; } };
Rochambo
めんどくさい、書くだけ
class Rochambo { public: int wins( string opponent ) { int res = 0; string me = "RR"; char one = opponent[0], two = opponent[1]; for (int i=2; i<opponent.length(); i++) { if (one == two) { if (one == 'R') me += 'P'; else if (one == 'P') me += 'S'; else if (one == 'S') me += 'R'; } else { if (one!='R'&&two!='R') me += 'P'; else if (one!='P'&&two!='P') me += 'S'; else if (one!='S'&&two!='S') me += 'R'; } one = two; two = opponent[i]; } for (int i=0; i<me.length(); i++) { if (me[i]=='R'&&opponent[i]=='S') res++; else if (me[i]=='P'&&opponent[i]=='R') res++; else if (me[i]=='S'&&opponent[i]=='P') res++; } return res; } };