*ACM/ICPC [#j81a080c]
ACM/ICPCに参加することになったぽいので問題をみんなで解いた結果とか、有用なサイトとかの情報を書いていきましょう。
-[[過去問:http://www.acm-japan.org/icpc-j.html]]
-[[ACM/ICPC問題用入出力の書き方:http://www.deqnotes.net/acmicpc/input_output]]
-[[ACM-ICPC OB/OG の会:http://acm-icpc.aitea.net/index.php?FrontPage]]

**結果 [#ga5047ad]
***2010年 [#v9e4fd2b]
-[[国内予選の結果(CCS内部)>>10年度-ACM-ICPC国内予選]]
-[[国内予選の結果(CCS内部)>10年度-ACM-ICPC国内予選]]
***2008年 [#e2bdb785]
-[[国内予選の結果(CCS内部)>08年度-ACM-ICPC国内予選]]

***2007年 [#w752d8f4]
-[[国内予選の結果(CCS内部)>07年度-ACM-ICPC国内予選]]

-[[ACM-ICPC 国内の参加チーム一覧:http://icpc.baylor.edu/icpc/regionals/RosterPublic.asp?ContestID=881]] ネタですけれども。 by [[ねいむ]]

**解答晒し [#r79fc17a]
[[2006A:http://www.acm-japan.org/past-icpc/domestic2006/contest/all_ja.html#section_A]] 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の解答]]&br;


[[2006Dの解答]]&br;
&br;
&br;



[[2005A:http://www.acm-japan.org/past-icpc/domestic2005/A/A_ja.html]] 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の解答]]&br;


[[2005Cの解答]]&br;
&br;
&br;


[[2004Aの解答]]&br;


[[2004Bの解答]]&br;


[[2004Dの解答]]&br;


[[2004Eの解答]]&br;
&br;
&br;


[[2003A:http://www.acm-japan.org/past-icpc/domestic2003/A.htm]] 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