2024初三集训模拟测试2
\(T0\) 谜之阶乘 \(100pts\)
- 详见 普及模拟2 T4 阶乘 。
\(T1\) 小P的2048 \(10pts\)
-
大模拟,没什么好说的。
- 注意可以同时合并多对数字,但不能连续合并。
点击查看代码
ll a[10][10]; queue<ll>q; int main() { ll n,m,x1,y1,v1,x2,y2,v2,d,k,v,sum=0,ans=0,r,num,flag,i,j,h; cin>>n>>m>>x1>>y1>>v1>>x2>>y2>>v2; a[x1][y1]=v1; a[x2][y2]=v2; for(h=1;h<=m;h++) { cin>>d>>k>>v; r=num=flag=0; if(d==0) { for(j=1;j<=n;j++) { for(i=1;i<=n;i++) { if(a[i][j]!=0) { if(1<=i-1&&a[i-1][j]==0) { flag=1; } q.push(a[i][j]); } } for(i=1;i<=n;i++) { a[i][j]=(q.empty()==0)?q.front():0; if(q.empty()==0) { q.pop(); } } } for(j=1;j<=n;j++) { for(i=1;i<=n;i++) { if(i+1<=n&&a[i][j]==a[i+1][j]&&a[i][j]!=0) { flag=1; a[i][j]*=2; a[i+1][j]=0; ans+=a[i][j]; } } } for(j=1;j<=n;j++) { for(i=1;i<=n;i++) { if(a[i][j]!=0) { if(1<=i-1&&a[i-1][j]==0) { flag=1; } q.push(a[i][j]); } } for(i=1;i<=n;i++) { a[i][j]=(q.empty()==0)?q.front():0; if(q.empty()==0) { q.pop(); } r+=(a[i][j]==0); } } } if(d==1) { for(j=1;j<=n;j++) { for(i=n;i>=1;i--) { if(a[i][j]!=0) { if(i+1<=n&&a[i+1][j]==0) { flag=1; } q.push(a[i][j]); } } for(i=n;i>=1;i--) { a[i][j]=(q.empty()==0)?q.front():0; if(q.empty()==0) { q.pop(); } } } for(j=1;j<=n;j++) { for(i=n;i>=1;i--) { if(1<=i-1&&a[i][j]==a[i-1][j]&&a[i][j]!=0) { flag=1; a[i][j]*=2; a[i-1][j]=0; ans+=a[i][j]; } } } for(j=1;j<=n;j++) { for(i=n;i>=1;i--) { if(a[i][j]!=0) { if(i+1<=n&&a[i+1][j]==0) { flag=1; } q.push(a[i][j]); } } for(i=n;i>=1;i--) { a[i][j]=(q.empty()==0)?q.front():0; if(q.empty()==0) { q.pop(); } r+=(a[i][j]==0); } } } if(d==2) { for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(a[i][j]!=0) { if(1<=j-1&&a[i][j-1]==0) { flag=1; } q.push(a[i][j]); } } for(j=1;j<=n;j++) { a[i][j]=(q.empty()==0)?q.front():0; if(q.empty()==0) { q.pop(); } } } for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(j+1<=n&&a[i][j]==a[i][j+1]&&a[i][j]!=0) { flag=1; a[i][j]*=2; a[i][j+1]=0; ans+=a[i][j]; } } } for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(a[i][j]!=0) { if(1<=j-1&&a[i][j-1]==0) { flag=1; } q.push(a[i][j]); } } for(j=1;j<=n;j++) { a[i][j]=(q.empty()==0)?q.front():0; if(q.empty()==0) { q.pop(); } r+=(a[i][j]==0); } } } if(d==3) { for(i=1;i<=n;i++) { for(j=n;j>=1;j--) { if(a[i][j]!=0) { if(j+1<=n&&a[i][j+1]==0) { flag=1; } q.push(a[i][j]); } } for(j=n;j>=1;j--) { a[i][j]=(q.empty()==0)?q.front():0; if(q.empty()==0) { q.pop(); } } } for(i=1;i<=n;i++) { for(j=n;j>=1;j--) { if(1<=j-1&&a[i][j]==a[i][j-1]&&a[i][j]!=0) { flag=1; a[i][j]*=2; a[i][j-1]=0; ans+=a[i][j]; } } } for(i=1;i<=n;i++) { for(j=n;j>=1;j--) { if(a[i][j]!=0) { if(j+1<=n&&a[i][j+1]==0) { flag=1; } q.push(a[i][j]); } } for(j=n;j>=1;j--) { a[i][j]=(q.empty()==0)?q.front():0; if(q.empty()==0) { q.pop(); } r+=(a[i][j]==0); } } } if(flag==1&&r!=0) { sum++; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { num+=(a[i][j]==0); if(num==k%r+1) { a[i][j]=v; break; } } if(num==k%r+1) { break; } } } else { break; } } cout<<sum<<endl; cout<<ans<<endl; return 0; }
\(T2\) 子集 \(0pts\)
-
部分分
- \(20 \%\) :由于 \(\dfrac{n}{k}\) 为偶数,故在待选递增序列中左右端各依次取 \(\dfrac{n}{2k}\) 个数即可。
点击查看代码
if((n/k)%2==0) { l=0; r=n+1; cout<<"Yes"<<endl; for(i=1;i<=k;i++) { for(j=1;j<=(n/k)/2;j++) { l++; cout<<l<<" "; } for(j=1;j<=(n/k)/2;j++) { r--; cout<<r<<" "; } cout<<endl; } }
\(T3\) 混凝土粉末 \(0pts\)
\(T4\) 排水系统 \(0pts\)
总结
- 开题顺序 \(T0,T3,T2,T1\) 。
- \(T2\) 赛时没有删
freopen
,挂了 \(25pts\) 。 - \(T3\) 用的
gp_hash_table
,空间爆了。 - \(T1\) 写到比赛结束一个多小时也没有调完,很久没有写过大模拟了,该练练了。
- 菜就多练。
- \(T4\) 看见概率期望就直接跳了,也没时间写了。
后记
- \(T0\) 为原本的 \(T1\) ,因机房人做过的太多所以仅存在了 \(90s\) 就被换下去了,赛时只有我交了一份 \(AC\) 代码上去。
- \(T2\) 下发了
Special Judge
,还教了怎么使用Special Judge
,好评。 - \(T3\) 在没有提前说明的情况下使用了捆绑测试。
- \(PDF\) 上写了文件输入输出,但评测时却是标准输入输出。
- 有大样例,好评。