2024.9.25 模拟赛 多校
1.2024.7.18模拟赛12.2024.7.19模拟赛23.2024.7.20模拟赛34.2024.7.21模拟赛45.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 模拟赛 CSP4
23.2024.9.25 模拟赛 多校
24.2024.9.27 模拟赛 CSP525.2024.9.28 模拟赛 CSP626.2024.9.30 模拟赛 CSP727.2024.10.7 模拟赛 多校328.2024.?.?? 模拟赛 ???模拟赛
假做法上大分。
T1 几何
bitset 优化 dp。有空学,先挂个暴力。
code
#include<bits/stdc++.h>
using namespace std;
const int N = 5e5+5;
int T,n,m,t;
char s[N],x[55],y[55];
unordered_map<int,unordered_map<int,bool> >f[N];
unordered_map<int,unordered_map<int,bool> >vs[N];
bool dfs(int p,int nx,int ny)
{
if(p==t+1) return (nx==n&&ny==m);
if(vs[p][nx][ny]) return f[p][nx][ny];
if(s[p]==x[nx%n+1]) if(dfs(p+1,nx%n+1,ny)) return 1;
if(s[p]==y[ny%m+1]) if(dfs(p+1,nx,ny%m+1)) return 1;
vs[p][nx][ny]=1;
return f[p][nx][ny]=0;
}
int main ()
{
freopen("geometry.in","r",stdin);
freopen("geometry.out","w",stdout);
scanf("%d",&T);
while(T--)
{
scanf("%s%s%s",s+1,x+1,y+1);
n=strlen(x+1),m=strlen(y+1),t=strlen(s+1);
for(int i=1;i<=t;i++) f[i].clear(),vs[i].clear();
if(dfs(1,n,m)) printf("Yes\n");
else printf("No\n");
}
return 0;
}
T2 分析
又是一道树上 dp。。。
发现问题和一笔画问题有点像,也就是如果一条路径能一笔画完就没有代价,每个点的度数都为偶数时能一笔画完,所以关键在度数为奇数的点的个数。
为了确定度数,我们先进行 A 操作,A 操作可以直接看成加重边,对于加完 A 操作的图,如果还存在奇数的点(一笔画不完),那么就需要 B 来补。
显然,如果存在
注意有一个
设计状态
- 0:包括根在内整颗子树没有度数为奇数的点。
- 1:根的度数为奇数。(因为任意一个图内度数为奇数的点有偶数个,所以子树内一定还有一个)
- 2:根的度数为偶数,子树内有度数为奇数的点。
转移过程枚举是否加重边,然后考虑度数变化。
转移很长。。。
code
#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int N = 5e5+5;
int n;
LL f[N][3],g[3],A,B;
vector<int> e[N];
void dfs(int u,int fa)
{
for(int v:e[u])
{
if(v==fa) continue;
dfs(v,u);
g[0]=f[u][0]+f[v][0]+A;
g[1]=min({f[u][0]+min(f[v][0],f[v][2])+B,f[u][2]+min(f[v][2],f[v][0])+B,f[u][2]+f[v][1],f[u][0]+f[v][1],f[u][1]+min({f[v][0],f[v][1],f[v][2]})+A});
g[2]=min({f[u][2]+min({f[v][0],f[v][1],f[v][2]})+A,f[u][0]+min(f[v][1],f[v][2])+A,f[u][1]+min(f[v][0],f[v][2]),f[u][1]+f[v][1]-B});
f[u][0]=g[0]; f[u][1]=g[1]; f[u][2]=g[2];
}
}
int main()
{
freopen("analyse.in","r",stdin);
freopen("analyse.out","w",stdout);
scanf("%d%lld%lld",&n,&A,&B); A=min(A,B);
for(int i=1;i<=n;i++) f[i][1]=f[i][2]=1e17;
for(int i=1;i<n;i++)
{
int x,y; scanf("%d%d",&x,&y);
e[x].push_back(y); e[y].push_back(x);
}
dfs(1,0);
printf("%lld\n",min({f[1][0],f[1][1]-B,f[1][2]-B}));
return 0;
}
T3 代数
考虑子树大小的
咕咕咕。。。
T4 组合
构造
咕咕咕。。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!