暑假集训CSP提高模拟17
A. 符号化方法初探
看最大数和最小数的绝对值大小,用至多
点击查看代码
#include<bits/stdc++.h>
const int maxn=2e5+10;
using namespace std;
int n,a[maxn],x[maxn],y[maxn],cnt,minn,maxx,ma,mi;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n;
maxx=-2e9;
minn=2e9;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]>maxx) maxx=a[i],ma=i;
if(a[i]<minn) minn=a[i],mi=i;
}
if(-minn>maxx)
{
for(int i=1;i<=n;i++)
{
if(a[i]>0)
{
// a[i]+=minn;
x[++cnt]=mi,y[cnt]=i;
}
}
for(int i=n-1;i>=1;i--)
{
// a[i]+=a[i+1];
x[++cnt]=i+1,y[cnt]=i;
}
}
else
{
for(int i=1;i<=n;i++)
{
if(a[i]<0)
{
// a[i]+=maxx;
x[++cnt]=ma,y[cnt]=i;
}
}
for(int i=2;i<=n;i++)
{
// a[i]+=a[i-1];
x[++cnt]=i-1,y[cnt]=i;
}
}
cout<<cnt<<'\n';
for(int i=1;i<=cnt;i++)cout<<x[i]<<" "<<y[i]<<'\n';
return 0;
}
/*
4
-1 -1 0 -1
*/
B. 无标号 Sequence 构造
思维题,
我们先
点击查看代码
#include<bits/stdc++.h>
const int mod=998244353;
const int maxn=3010;
using namespace std;
int t,n,a[maxn][maxn],b[maxn][maxn],c[maxn][maxn],flag,aa[2][maxn],cc[2][maxn];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>t;
while(t--)
{
flag=0;
cin>>n;
memset(aa,0,sizeof aa);
memset(cc,0,sizeof cc);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)cin>>a[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)cin>>b[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)cin>>c[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
aa[1][i]=(aa[1][i]+1ll*a[j][i]*(j%2+1)%mod)%mod;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cc[1][i]=(cc[1][i]+1ll*c[j][i]*(j%2+1)%mod)%mod;
for(int i=1;i<=n;i++)
{
long long temp=0;
for(int j=1;j<=n;j++)
{
temp=(temp+1ll*aa[1][j]*b[j][i])%mod;
// cout<<temp<<" "<<cc[1][i]<<endl;
}
if(temp!=cc[1][i])flag=1;
if(flag)break;
}
if(flag) cout<<"No"<<'\n';
else cout<<"Yes"<<'\n';
}
return 0;
}
D. 有限制的构造
一个但我
初始模型是
观察到
我们强制让
点击查看代码
#include<bits/stdc++.h>
const int maxn=1e4+10;
using namespace std;
int n,A,B,ans,a[100],b[100],f[2][82][maxn];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>A>>B;
for(int i=1;i<=n;i++)
cin>>a[i]>>b[i];
memset(f,0x7f,sizeof f);
f[1][0][0]=f[0][0][0]=0;
for(int i=1;i<=n;i++)
{
int temp=i&1;
for(int j=1;j<=i;j++)
{
for(int k=0;k<=A;k++)
{
if(k>=a[i])f[temp][j][k]=f[temp^1][j-1][k-a[i]]+b[i];
f[temp][j][k]=min(f[temp][j][k],f[temp^1][j][k]);
}
}
}
for(int i=n;i>=0;i--)
{
for(int j=0;j<=A;j++)
{
if(f[1][i][j]<=B||f[0][i][j]<=B)
{
cout<<min(i+1,n);
return 0;
}
}
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】