ACM/ICPC

ACM/ICPCに参加することになったぽいので問題をみんなで解いた結果とか、有用なサイトとかの情報を書いていきましょう。

結果

2010年

2008年

2007年

解答晒し

2006A by ゆん 所要時間35分程度。forのあたりが汚い罠。

解法: 数列の最初から順番に素数かどうかを判定し数えていく。

#include <stdio.h>
#include <math.h>
int isPrime(int n) {
	if(n == 1) return 0;
	for(int i = 2; i <= sqrt(n); ++i) {
		if (n % i == 0) 	return 0;
	}
	return 1;
}
int main() {
	int a, d, n;
	while(1) {
		scanf("%d %d %d ", &a, &d, &n);
		if(a == 0 && d == 0 && n== 0) return 0;
		int t;
		for(int i = 0, p = 0; p != n; t = a + d * i, p += isPrime(t), ++i) {}
		printf("%d\n", t);
	}
}

2006Bの解答

2006Dの解答


2005A by ゆん所要時間60分程度。ファイル入出力を思い出すのに時間がかかった。

解法: 単利と複利の計算、単純。

#include <stdio.h>
#include<algorithm>
int simple(int initial, int years, double rate, int aoc){
	int sum = 0;
	for(int i = 0; i < years; ++i){
		sum += (int)(initial * rate);
		initial -= aoc;
	}
	return initial + sum;
}
int compound(int initial, int years, double rate, int aoc) {
	for(int i = 0; i < years; ++i){
		initial += (int)(initial * rate);
		initial -= aoc;
	}
	return initial;
}
int main() {
	int datasets;
	scanf("%d", &datasets);
	for(int i = 0; i < datasets; i++){
		int initial, years , ops;
		scanf("%d%d%d", &initial, &years, &ops);
		int max = 0;
		for(int j = 0; j < ops; j++) {
			int x, z;
			double y;
			scanf("%d%lf%d", &x, &y, &z);
			int tmax = x ? compound(initial, years, y, z) : simple(initial, years, y, z);
			max = std::max(max, tmax);
		}
		printf("%d\n", max);
	}
	return 0;
}

2005Bの解答

2005Cの解答


2004Aの解答

2004Bの解答

2004Dの解答

2004Eの解答


2003A by ゆん 所要時間35から45分。

解法: 日付を配列の添え字に利用して、人数を数える。

#include <stdio.h>
int main() {
	int convenient[101];
	int N, Q;
	while(1) {
		scanf("%d%d", &N, &Q);
		if(N == 0 && Q == 0) return 0;
		for(int i = 0; i < 101; ++i){
			convenient[i] = 0;
		}
		for(int i = 0; i < N; ++i){
			int M;
			scanf("%d", &M);
			for(int j = 0; j < M; ++j){
				int d;
				scanf("%d", &d);
				convenient[d] += 1;
			}
		}
		for(int i = 0, max = 0, q = 0; i < 101; ++i){
			if(convenient[i] >= Q) {
				if(q < convenient[i]) {
					q = convenient[i];
					max = i;
				}
			}
			if(i == 100) {
				printf("%d\n", max);
			}
		}
	}
}

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-11-21 (木) 11:25:35 (1610d)