活動日記 day 40
活動内容 :
輪講
コンテスト (Div1 : チーム戦, Div2 : 個人戦)
コンテスト :
Div1 : Virtual Arena: Room 3494
Div2 : Virtual Arena: Room 3493
コメント :
今週ICPC WFがrapid cityで開催されるので要チェックです。
活動日記 day 39
活動内容 :
コンテスト ( 個人戦 )
コンテスト : AtCoder Virtual Contest
活動日記 day38
活動内容 :
輪講
コンテスト (Div1 : チーム戦, Div2 : 個人戦)
コンテスト :
Div1 : Virtual Arena: Room 3472
Div2 : Virtual Arena: Room 3473
活動日記 day 37
活動内容 :
輪講
コンテスト (Div1 : チーム戦, Div2 : 個人戦)
新歓
コンテスト :
Div1 : Virtual Arena: Room 3420
Div2 : Virtual Arena: Room 3421
コメント:
第一回あり本輪読会を行いました。
コンテストはDiv1とDiv2に分かれて行いました。
新歓もありました。
活動日記 day 36
活動内容 :
コンテスト ( 個人戦 )
コンテスト : AtCoder Virtual Contest
活動日記 day 35
活動内容 :
部活動紹介
コンテスト (チーム戦)
コンテスト : Virtual Arena: Room 3408
A - Water Rate
#include <iostream> #include <algorithm> using namespace std; int A = 0, B = 0; int C = 0, D = 0; int P = 0; int main(void){ cin >> A; cin >> B; cin >> C; cin >> D; cin >> P; int x = A * P; int y = (P <= C) ? B : B + D*(P-C); cout << min(x,y) << endl; }
B - Christmas Party
#include <iostream> #include <vector> using namespace std; int N = 0; int M = 0; int main(void){ cin >> N; cin >> M; vector<int> A(M, 0); vector<int> P(N, 0); int target = 0; int count = 0; int x = 0; int z = 0; for(int i=0; i<M; ++i){ cin >> A[i]; } for(int i=0; i<M; ++i){ target = A[i]; count = 0; for(int j=0; j<N; ++j){ cin >> x; if(x == target){ P[j] += 1; count++; } } P[target - 1] += (N - count); } for(int i=0; i<N; ++i){ cout << P[i] << endl; } }
C - Weather Forecaster
#include<iostream> using namespace std; int main(){ //scanf("%d",&n); int h,w; cin>>h>>w; char cloud[h][w]; for(int i=0;i<h;i++){ for(int j=0;j<w;j++){ cin>>cloud[i][j]; } } for(int i = 0; i < h; i++){ int j=0; while(cloud[i][j] != 'c'&&j<w){ cout << -1; j++; if(j<w){ cout<<" "; } } int count = 0; while(j<w){ if(cloud[i][j] == 'c'){ //int count = 0; count=0; cout<<count; } else{ count++; cout<<count; } j++; if(j<w){ cout<<" "; } } cout << endl; } //input finish return 0; }
D - Silk Road
#include <iostream> #include <algorithm> #include <climits> using namespace std; int N = 0, M = 0; int D[1000] = {0}; int C[1000] = {0}; int memo[1001][1001]; long dp(int i, int j){ if(memo[i][j] != -1){ return memo[i][j]; } if(j > M){ return memo[i][j] = INT_MAX; } if(i == N){ return memo[i][j] = 0; } long x = dp(i, j+1); long y = dp(i+1, j+1); if(x == INT_MAX && y == INT_MAX){ return memo[i][j] = INT_MAX; }else if(x == INT_MAX){ return memo[i][j] = C[j] * D[i] + y; }else if(y == INT_MAX){ return memo[i][j] = x; }else{ return memo[i][j] = min(x, C[j] * D[i] + y); } } int main(void){ fill(memo[0],memo[1000], -1); cin >> N >> M; for(int i=0; i<N; ++i){ cin >> D[i]; } for(int j=0; j<M; ++j){ cin >> C[j]; } cout << dp(0, 0) << endl; }
E - 3-Primes Problem
#include <iostream> #include <climits> #include <vector> using namespace std; int main() { int prime[1000]; for(int i=0;i<1000;i++){ prime[i]=1; } prime[0] = 0;// 1 is not prime for (int i = 0; i < 1000; i++) { if (prime[i] == 1) { //cout<<"hogehoge"<<endl; for (int j = (i + 1); (i + 1) * j <= 1000; j++) { prime[(i + 1) * j - 1] = 0; } } } int count = 0; for(int i = 0; i < 1000; i++){ if(prime[i] == 1){ count++; } } int number[count], n = 0; for(int i = 0; i < 1000; i++){ if(prime[i] == 1){ number[n] = i + 1; n++; } } int t=0; cin>>t; vector<int> a(t, 0); for(int i=0;i<t;i++){ cin>>a[i]; } for(int i=0;i<t;i++){ for(int j = 0; j < count; j++){ for(int k = 0; k < count; k++){ for(int l = 0; l < count; l++){ if(a[i] == number[j] + number[k] + number[l]){ cout << number[j] << " " << number[k] << " " << number[l] << endl; goto LABEL; } } } } LABEL: continue; } return 0; }
活動日記 day 34
活動内容 :
コンテスト ( 個人戦 )
コンテスト : AtCoder Virtual Contest
A - 25個の文字列
N-1を5で割った商と余りを1文字目と2文字目のインデックスに指定すれば解くことができます。
(全列挙したものをソートしても解くことは可能です。)
#include <iostream> using namespace std; int main() { string S; int N; cin >> S >> N; cout << S[(N - 1) / 5] << S[(N - 1) % 5] << endl; return 0; }
B - 双子とスイカ割り
1行ずつシミュレートしましょう。
#include <iostream> using namespace std; int main() { int N, A, B; cin >> N >> A >> B; int sum = 0; for(int i = 0; i < N; i++){ string s; int d; cin >> s >> d; if(d < A) d = A; else if(d > B) d = B; if(s == "West") sum += d; else sum -= d; } if(sum == 0) cout << 0 << endl; else if(sum > 0) cout << "West " << sum << endl; else cout << "East " << -sum << endl; return 0; }
C - 双子と○×ゲーム
未定
D - 25個の整数
未定
E - ウサギとカメ
未定