2024.7.21模拟赛4
1.2024.7.18模拟赛12.2024.7.19模拟赛23.2024.7.20模拟赛3
4.2024.7.21模拟赛4
5.2024.7.22模拟赛56.2024.7.23 模拟赛67.2024.7.25模拟赛78.2024.7.26模拟赛89.2024.7.27模拟赛910.2024.7.28 模拟赛1011.2024.7.29模拟赛1112.2024.7.31模拟赛1213.2024.8.1 模拟赛1314.2024.8.6 模拟赛 1415.2024.8.7 模拟赛 1516.2024.8.8模拟赛1617.2024.8.10模拟赛1718.2024.8.18 模拟赛 2219.2024.8.19 模拟赛 2420.小集训21.2024.9.23 模拟赛 CSP 322.2024.9.24 模拟赛 CSP423.2024.9.25 模拟赛 多校24.2024.9.27 模拟赛 CSP525.2024.9.28 模拟赛 CSP626.2024.9.30 模拟赛 CSP727.2024.10.7 模拟赛 多校328.2024.?.?? 模拟赛 ???模拟赛
不挂分比挂分打的更少。。。
Qyun%%%
T1 Lights Out on Tree
无脑
其实菊花和链的都可以打的,下次注意。
我们看数据范围,能操作的只有一个黑点个数,只要涉及白点一定会炸。
所以考虑每一个黑点的贡献(跟前两天单独考虑贡献的好像差不多?)。
观察得,如果它和它的父亲颜色不同就会有贡献。
但是如果对于每一个黑点遍历它的所有白儿子,会炸。
我们反过来考虑,先假设每个点的儿子都是白的,如果有一个黑点的父亲是黑点,那么总的贡献就会减一,否则要加上一。(它也有父亲)
code
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+5;
int n,m;
int a[N],cnt,d[N],fa[N],son[N];
int main()
{
scanf("%d%d",&n,&m);
for(int i=2;i<=n;i++)
{
int x; scanf("%d",&x);
fa[i]=x; son[x]++;
}
while(m--)
{
int c,res=0; scanf("%d",&c);
for(int i=1;i<=c;i++)
{
scanf("%d",&d[i]);
a[d[i]]=1; res+=son[d[i]];
}
for(int i=1;i<=c;i++) if(a[fa[d[i]]]) res--; else res++;
printf("%d\n",res);
for(int i=1;i<=c;i++) a[d[i]]=0;
}
return 0;
}
T2 Encryption (hard) (medium) (easy)
已经不知道咕了多少天了。。。
注意卡空间!!!
赛时 long long 直接炸!
首先想到单调队列优化 dp,但是有一个取模,直接否掉。
考虑暴力
然后考虑优化,首先观察性质:
所以如果
因此我们只需要找到最小的
注意
code
#include<bits/stdc++.h>
using namespace std;
const int N = 5e5+5;
#define LL long long
int n,k,p,a[N],s[N];
int f[N][101],pos[101];
int main()
{
memset(f,0x3f,sizeof(f));
scanf("%d%d%d",&n,&k,&p);
for(int i=1;i<=n;i++) scanf("%d",&a[i]),s[i]=(s[i-1]+a[i])%p;
f[0][0]=0;
for(int i=1;i<=n;i++)
{
for(int h=1;h<=k;h++)
{
f[i][h]=f[pos[h-1]][h-1]+(s[i]-s[pos[h-1]]+p)%p;
}
for(int j=1;j<=k;j++) if(f[i][j]<f[pos[j]][j]) pos[j]=i;
}
printf("%d\n",f[n][k]);
return 0;
}
T3 ± Increasing Sequence
先随便造一个单调递增串
然后考虑对这个串进行修改,并且不能改变原有的递增关系。
因此我们考虑对前缀和后缀整体进行操作,这样让前缀减一个值,后缀加一个值,一定不会改变递增关系的。
所以我们遍历所有前缀,如果目前
其他情况同理,还有后缀的。
code
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+5;
#define LL long long
int n,a[N],s1[N],s2[N];
LL tot,ans[N];
int main()
{
// freopen("1.in","r",stdin);
// freopen("o1.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++) scnaf("%d",&a[i]),s1[i]=s1[i-1]+a[i];
for(int i=n;i>=1;i--) s2[i]=s2[i+1]+a[i];
for(int i=1;i<=n;i++) ans[i]=i,tot+=i*a[i];
if(tot==0)
{
printf("Yes\n");
for(int i=1;i<=n;i++) printf("%lld ",ans[i]);
return 0;
}
if(tot<0)
{
for(int i=1;i<=n;i++) if(s1[i]<0)
{
printf("Yes\n");
for(int j=1;j<=n;j++) j<=i?printf("%lld ",ans[j]+tot):printf("%lld ",ans[j]);
return 0;
}
for(int i=n;i>=1;i--) if(s2[i]>0)
{
printf("Yes\n");
for(int j=1;j<=n;j++) j>=i?printf("%lld ",ans[j]-tot):printf("%lld ",ans[j]);
return 0;
}
}
else
{
for(int i=1;i<=n;i++) if(s1[i]>0)
{
printf("Yes\n");
for(int j=1;j<=n;j++) j<=i?printf("%lld ",ans[j]-tot):printf("%lld ",ans[j]);
return 0;
}
for(int i=n;i>=1;i--) if(s2[i]<0)
{
printf("Yes\n");
for(int j=1;j<=n;j++) j>=i?printf("%lld ",ans[j]+tot):printf("%lld ",ans[j]);
return 0;
}
}
printf("No\n");
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本