Codeforces Round #239
これからはCFやTCのメモを書いていこうと思います。(あくまで自分で見返す用なので適当になるとは思いますが許してください)
あと、テンプレはもう書きませんが許してください。
A
やるだけ。
int a[105]; int main() { int n; cin >> n; for(int i=0;i<n;i++)cin >> a[i]; int ans=INF; for(int i=0;i<n;i++) { int sum=0; for(int j=0;j<a[i];j++) { int k; cin >> k; sum+=k; } int res=sum*5+15*a[i]; ans=min(ans,res); } cout << ans << endl; return 0; }
B
やるだけだけど英語読み間違えて1WAだしては?ってなって先にC解いたので得点低かった
int al[30]; int bl[30]; int main() { string n,m; cin >> n; cin >> m; for(int i=0;i<n.size();i++)al[n[i]-'a']++; for(int i=0;i<m.size();i++)bl[m[i]-'a']++; int ans=0; for(int i=0;i<30;i++) { if(bl[i]>0&&al[i]==0) { cout << -1 << endl; return 0; } ans+=min(al[i],bl[i]); } cout << ans << endl; return 0; }
C
直角の頂点を原点に固定しても問題ない。あとはピタゴラス数を探して、斜辺が座標軸と平行にならないようにする
int main() { int a,b; cin >> a >> b; if(a<b)swap(a,b); vector<int> w,h; for(int i=1;i<b;i++) { for(int j=1;j<b;j++) { if(i*i+j*j==b*b) { w.pb(i);h.pb(j); } } } if(w.size()==0&&h.size()==0) { cout << "NO" << endl; return 0; } for(int i=0;i<w.size();i++) { if((w[i]*a)%b!=0)continue; if((h[i]*a)%b!=0)continue; if(w[i]*a/b==h[i])continue; cout << "YES" << endl; cout << "0 0" << endl; cout << w[i] << " " << h[i] << endl; cout << -h[i]*a/b << " " << w[i]*a/b << endl; return 0; } cout << "NO" << endl; return 0; }
D
C解いたあとHackしようとしていたができそうなのが見つからなかったのでD読んだら漸化式すぐわかったのでこれはキタと思ったが終了間際で、間に合わず。これは痛かった。反省。
ll dp[1010]; int p[1010]; int main() { int n; cin >> n; for(int i=0;i<n;i++) { cin >> p[i]; p[i]--; } dp[0]=0; dp[1]=2; for(int i=1;i<=n;i++)dp[i+1]=((dp[i]*2+2)+MOD-dp[p[i]])%MOD; cout << dp[n] << endl; return 0; }