专栏文章

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

实际

T1:70pts
T2:100pts
T3:100pts
T4:66pts

原因

既然我想要AK那就一定会有问题
T1:分类讨论题我落了两类
T2:无
T3:无
T4:贪心打错了。。。

题解

T1

共有 33 类。

1.全是正数

贪心,从小到大排序后输出 a0×(a1+a2)a_0\times(a_1+a_2) 即可。
CPP
sort(a+1,a+1+n);
if(a[1]>=0)printf("%d",a[1]*(a[2]+a[3]));

2.全是负数

贪心,从大到小排序后输出 a0×(a1+a2)a_0\times(a_1+a_2) 即可。
CPP
else if(a[n]<0)printf("%d",a[n]*(a[n-1]+a[n-2]));

3.有正有负

有正有负那结果为负且答案的绝对值越大越好。
CPP
else 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 条评论,欢迎与作者交流。

正在加载评论...