Codeforces Beta Round #17

途中から初参加。

Noldbach problem

解もprimerじゃなきゃいけないって条件を見落としていて、何故ExampleBがNoになるのか終了ギリギリまで分からなかった。
英語読解の問題だなー。

#include <algorithm>
#include <iostream>
#include <map>
#include <numeric>
#include <set>
#include <sstream>
#include <string>
#include <vector>
using namespace std;

bool primer(const int n){
	int i=2;
	while(n>=i*i){
		if(n%i == 0) return false;
		i++;
	}
	return true;
}

int nextprimer(int n){
	while(true){
		n++;
		if(primer(n)) return n;
	}
	return 0;
}

int main(){
	int n,k;
	cin >> n >> k;

	int count = 0;
	bool count_test;
	for(int i=2; i<=n; i++){
		if(!primer(i)) continue;
		count_test=false;
		for(int j=2; j<=(i-1)/2 && count_test==false && count < k; j++){
			if(primer(j)){
				if(j<i-j-1 && primer(i-j-1) && i-j-1 == nextprimer(j)){
					count++;
					count_test=true;
				}
			}
		}
	}

	if(count == k){
		cout << "YES" << endl;
	}else{
		cout << "NO" << endl;
	}
}

Hierarchy

変数名はもうちょっと綺麗にかけるようになりたい。
qualが大きい方から考えていけばおっけー。

#include <algorithm>
#include <iostream>
#include <map>
#include <numeric>
#include <set>
#include <sstream>
#include <string>
#include <vector>
using namespace std;

int comparevec(vector<int> n){
    int max = n[0];
    int maxnum = 0;
    for(unsigned int i=1; i<n.size(); i++){
        if(max<n[i]){
            max=n[i];
            maxnum = i;
        }
    }
    return maxnum;
}

struct app{
    int a;
    int b;
    int c;
};

int main(){
    int result = 0;

    int n;
    cin >> n;
    vector<int> qual;
    for(int i=0; i<n; i++){
        int m;
        cin >> m;
        qual.push_back(m);
    }

    int m;
    cin >> m;
    vector<app> appl;
    for(int i=0; i<m; i++){
        int a,b,c;
        cin >> a >> b >> c;
        app applic;
        applic.a = a;
        applic.b = b;
        applic.c = c;
        appl.push_back(applic);
    }

    int maxnum = comparevec(qual);
    qual[maxnum] = -1;

    for(int i=0; i<n-1; i++){
        maxnum = comparevec(qual);
        qual[maxnum] = -1;
        int cost = 1000001;
        for(unsigned int j=0; j<appl.size(); j++){
            if(appl[j].b-1 == maxnum){
                if(qual[appl[j].a-1] == -1){
                    if(cost>appl[j].c){
                        cost = appl[j].c;
                    }
                }
            }
        }
        if(cost < 1000001){
            result += cost;
        }else{
            cout << -1 << endl;
            return 0;
        }
    }
    cout << result << endl;
    return 0;
}

Balance

見てない。

NotePad

文字列使ってcの余りをとっていけば解を出せるところは分かったんだけど、時間切れ。

Palisection

見てない。