昨日のコードの修正
流石に遅すぎるので書き直した。採点したいけど、データが多すぎてどうすればちょっと困惑してる。スクリプトとか書けません。採点が終わったら、下の方に書いておきます
本選
2.
Bのi番目のカードから考えて得点が最大になるようにする。バグは取ったつもりだけど、まだ残ってたら恥ずかしい。O(n^2)だと思う。
int a,b,A[5000],B[5000],ans; int f(int s){ int k = 0; for(int i = s; i < b; i++){ while(k<a && A[k] != B[i]) k++; if(k>=a) return i-s; k++; } return b-s; } int main(){ scanf("%d %d",&a,&b); for(int i = 0; i < a; i++) scanf("%d",&A[i]); for(int i = 0; i < b; i++) scanf("%d",&B[i]); for(int i = 0; i < b; i++){ ans = max(ans,f(i)); } printf("%d",ans); return 0; }
4.
点だけ記録しておいて、最後にO(n^2)で塗りつぶす。よく分からないけどメモリの使いすぎ?メモリで落ちるのでダメらしい。メモリ確保ミスでした
int n,m,tr[3001][3001],y,x,s,ans;//tr[5001][5001]にする int main(){ cin>>n>>m; for(int i = 0; i < m; i++){ scanf("%d %d %d",&x,&y,&s); tr[x][y] = s+1; } for(int i = 1; i <= n; i++){ for(int j = 1; j <= i; j++){ tr[i][j] = max(tr[i][j],max(tr[i-1][j],tr[i-1][j-1])-1); } } for(int i = 1; i <= n; i++){ for(int j = 1; j <= i; j++){ if(tr[i][j])ans++; } } cout<<ans; return 0; }
点数(配点は推測)
1.100点
2.100点
3.10点 -> 100点
4.20点 -> 100点
5.0点
240点取っても意味ないですが、240点取っておきたかったです
240点超えました。
追記
3も解けましたが、ちょっと直すだけでした。