Codeforces #23
A,Bは直ぐに解法が出たけど、Cの解法が全然出なかった…。
どんな状態でも"Yes"になるのは間違いなくて、あとはappleやorangeを適当に大きい順に並べればいいのかな、とか考えてました。
A - You're Given a String...
愚直に部分文字列比較。
#include <algorithm> #include <iostream> #include <map> #include <numeric> #include <set> #include <sstream> #include <string> #include <vector> using namespace std; int main(){ string latin; cin >> latin; vector<string> tmp; bool flg = false; int result = 0; for(int i=(int)latin.size()-1; i>0 && !flg; i--){ for(int j=0; j+i<=(int)latin.size() && !flg; j++){ string tmp1 = latin.substr(j,i); for(int k=0; k<(int)tmp.size(); k++){ if(tmp1 == tmp[k]){ flg = true; result = i; break; } } tmp.push_back(tmp1); } tmp.clear(); } cout << result << endl; return 0; }
B - Party
N人中、2人が(N+1)/2人、その他全員が(N+3)/2人と友達であれば、2人以外は全員残ることに気づけばコードは簡単。
#include <algorithm> #include <iostream> #include <map> #include <numeric> #include <set> #include <sstream> #include <string> #include <vector> using namespace std; int main(){ int trials; cin >> trials; for(int i=0; i<trials; i++){ int n; cin >> n; int result = n - 2; if(result < 0) result = 0; cout << result << endl; } return 0; }