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;
}