ACM/ICPC
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*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国内予選]]
***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);
}
}
}
}
終了行:
*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国内予選]]
***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);
}
}
}
}
ページ名: