专栏文章
10.25模拟赛
个人记录参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mini52ak
- 此快照首次捕获于
- 2025/12/02 02:48 3 个月前
- 此快照最后确认于
- 2025/12/02 02:48 3 个月前
分数
估分
T1:100pts
T2:100pts
T3:100pts
T4:100pts
T2:100pts
T3:100pts
T4:100pts
实际
T1:70pts
T2:100pts
T3:100pts
T4:66pts
T2:100pts
T3:100pts
T4:66pts
原因
T1:分类讨论题我落了两类
T2:无
T3:无
T4:贪心打错了。。。
T2:无
T3:无
T4:贪心打错了。。。
题解
T1
共有 类。
1.全是正数
贪心,从小到大排序后输出 即可。
CPPsort(a+1,a+1+n);
if(a[1]>=0)printf("%d",a[1]*(a[2]+a[3]));
2.全是负数
贪心,从大到小排序后输出 即可。
CPPelse if(a[n]<0)printf("%d",a[n]*(a[n-1]+a[n-2]));
3.有正有负
有正有负那结果为负且答案的绝对值越大越好。
CPPelse printf("%d",min(a[n]*(a[1]+a[2]),a[1]*(a[n]+a[n-1])));
ACcode
CPP#include<bits/stdc++.h>
using namespace std;
int n,a[100005],z;
int main()
{
freopen("addfirst.in","r",stdin);
freopen("addfirst.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]==0)z=1;
}
sort(a+1,a+1+n);
if(a[1]>=0)printf("%d",a[1]*(a[2]+a[3]));
else if(a[n]<0)printf("%d",a[n]*(a[n-1]+a[n-2]));
else printf("%d",min(a[n]*(a[1]+a[2]),a[1]*(a[n]+a[n-1])));
return 0;
}
T2
模拟即可。
CPP#include<bits/stdc++.h>
using namespace std;
int a[10],f,ans;
string s;
char p;
int main()
{
freopen("combo1.in","r",stdin);
freopen("combo1.out","w",stdout);
for(int i=0;i<10;i++)cin>>a[i];
cin>>s;
for(int i=0;i<s.size();i++)
{
if(s[i]!='R'&&f==0)p=s[i],f=1;
else if(s[i]=='R'&&f==0)ans+=a[9];
else if(s[i]=='R')f=0;
else if(s[i]!='R')
{
f=0;
if(p=='Q')
{
if(s[i]=='Q')ans+=a[0];
else if(s[i]=='W')ans+=a[1];
else ans+=a[2];
}
else if(p=='W')
{
if(s[i]=='Q')ans+=a[3];
else if(s[i]=='W')ans+=a[4];
else ans+=a[5];
}
else
{
if(s[i]=='Q')ans+=a[6];
else if(s[i]=='W')ans+=a[7];
else ans+=a[8];
}
}
}
cout<<ans;
return 0;
}
T3
完全背包模板题,注意循环从小到大即可改了我1个小时。
CPP#include<bits/stdc++.h>
using namespace std;
int q,w,e,r,dp[505][505][505],v1[10]={0,2,1,1,1,0,0,1,0,0},v2[10]={0,0,1,0,1,2,1,0,1,0},v3[10]={0,0,0,1,0,0,1,1,1,2},c[11];
int main()
{
freopen("combo2.in","r",stdin);
freopen("combo2.out","w",stdout);
for(int i=1;i<=10;i++)cin>>c[i];
cin>>q>>w>>e>>r;
for(int j=0;j<=q;j++)
for(int k=0;k<=w;k++)
for(int l=0;l<=e;l++)
dp[j][k][l]=j/2*c[1];
for(int i=2;i<=9;i++)
for(int j=v1[i];j<=q;j++)
for(int k=v2[i];k<=w;k++)
for(int l=v3[i];l<=e;l++)
dp[j][k][l]=max(dp[j][k][l],dp[j-v1[i]][k-v2[i]][l-v3[i]]+c[i]);
cout<<dp[q][w][e]+r*c[10];
return 0;
}
T4
注意贪心即可。
CPP#include<bits/stdc++.h>
using namespace std;
int n,m,d,ans,a[505][505],vis[505],fg[505];
struct node
{
int l,r;
}q[505];
void dfs(int x,int y,int o)
{
if(a[x-1][y]<a[x][y])dfs(x-1,y,o);
if(a[x+1][y]<a[x][y])dfs(x+1,y,o);
if(a[x][y-1]<a[x][y])dfs(x,y-1,o);
if(a[x][y+1]<a[x][y])dfs(x,y+1,o);
if(x==n)vis[y]=1,q[o].l=min(q[o].l,y),q[o].r=max(q[o].r,y);
}
bool cmp(node x,node y)
{
return x.l==y.l?x.r>y.r:x.l<y.l;
}
int main()
{
// freopen("ntos.in","r",stdin);
// freopen("ntos.out","w",stdout);
ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
cin>>n>>m;
memset(a,0x3f,sizeof(a));
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
for(int i=1;i<=m;i++)q[i].l=505,q[i].r=-1,dfs(1,i,i);
for(int i=1;i<=m;i++)
{
if(vis[i]==0)
{
cout<<"0\n";
for(int i=1;i<=m;i++)ans+=(vis[i]==0);
return (cout<<ans)&&0;
}
}
sort(q+1,q+1+m,cmp);
for(int i=1;i<=m;i++)
{
if(fg[i]==0)
{
ans++;
long long maxn=0,maxj;
for(int j=1;j<=m;j++)if(q[j].r>=maxn&&q[j].l<=i)maxn=q[j].r,maxj=j;
for(int j=i;j<=q[maxj].r;j++) fg[j]=1;
}
}
cout<<"1\n"<<ans;
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...