CSP 模拟 1
1.CSP 模拟 0
2.CSP 模拟 1
3.CSP 模拟 24.CSP 模拟 35.CSP 模拟 46.CSP 模拟 57.CSP 模拟 68.CSP 模拟 79.CSP 模拟 810.CSP 模拟 911.CSP 模拟 1012.CSP 模拟 2413.CSP 模拟 2514.CSP 模拟 2615.CSP 模拟 2716.CSP 模拟 2817.CSP 模拟 2918.CSP 模拟 3019.CSP 模拟 3120.CSP 模拟 3221.CSP 模拟 3322.CSP 模拟 3423.CSP 模拟 3524.CSP 模拟 3625.CSP 模拟 3726.CSP 模拟 3827.CSP 模拟 3928.CSP 模拟 4029.CSP 模拟 4130.CSP 模拟 4231.CSP 模拟 4332.CSP 模拟 4433.CSP 模拟 4534.CSP 模拟 4635.CSP 模拟 4736.CSP 模拟 4837.CSP 模拟 4938.CSP 模拟 5039.CSP 模拟 5140.CSP 模拟 5241.CSP 模拟 5342.CSP 模拟 5443.NOIP 模拟 144.NOIP 模拟 245.NOIP 模拟 346.NOIP 模拟 447.NOIP 模拟 548.NOIP 模拟 649.NOIP 模拟 750.NOIP 模拟 851.NOIP2024(欢乐)加赛 352.NOIP 模拟 953.NOIP 模拟 1054.NOIP 模拟 1155.NOIP 模拟 1256.NOIP 模拟 1357.NOIP 模拟 1458.NOIP 模拟 1559.NOIP 模拟 1660.NOIP 模拟 17T1 [start]
原题 P7506 「Wdsr-2.5」琪露诺的算数游戏
大模拟,写完只贴个代码。
点击查看代码
#include<bits/stdc++.h> typedef long long ll; typedef unsigned long long ull; inline int read(){char ch=getchar();int x=0,f=1;for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<3)+(x<<1)+(ch^48);return x*f;} const int N=105; int n,m,k,st,top,tag,now,end,P,R; std::string sk[(int)3e5+10]; inline int SK(std::string s){ if(s.size()==2){return s[1]-'0';} else {return (s[1]-'0')*10+s[2]-'0';} } inline int ne(int x){return ((x+tag+n)%n)?((x+tag+n)%n):n;} struct PEO{std::string name,c[4];int tag;}p[N]; inline void useno(int id){ int max=-1e9; for(int i=1;i<=3;++i){ if(p[id].c[i].size()<=3){ int x=SK(p[id].c[i]); if(p[id].c[i][0]=='A'){ x+=P; if(x<=99)max=std::max(x,max); }if(p[id].c[i][0]=='B'){ x=P-x; if(x<=99)max=std::max(x,max); }if(p[id].c[i][0]=='C'){ x=P*x; if(x<=99)max=std::max(x,max); }if(p[id].c[i].size()<=3&&p[id].c[i][0]=='D'){ x=std::floor(P*1.0/x); if(x<=99)max=std::max(x,max); }if(p[id].c[i][0]=='E'){ max=std::max(x,max); } } } if(max==-1e9){ for(int i=1;i<=3;++i){ if(p[id].c[i]=="PASS"){ std::cout<<p[id].name<<" used PASS,now p="<<P<<".\n"; p[id].c[i]=sk[top++]; return; } } for(int i=1;i<=3;++i){ if(p[id].c[i]=="TURN"){ std::cout<<p[id].name<<" used TURN,now p="<<P<<".\n"; tag*=-1; p[id].c[i]=sk[top++]; return; } } for(int i=1;i<=3;++i){ if(p[id].c[i]=="DOUBLE"){ std::cout<<p[id].name<<" used DOUBLE,now p="<<P<<".\n"; p[ne(now)].tag=1; p[id].c[i]=sk[top++]; return; } } std::cout<<p[id].name<<" lost the game.\n"; p[id].c[1]=sk[top++];p[id].c[2]=sk[top++];p[id].c[3]=sk[top++]; end=1; return; } int pd=0; for(int i=1;i<=3;++i){ int x=SK(p[id].c[i]); if(p[id].c[i][0]=='C'){ x=P*x; if(x==max){ P=x; std::cout<<p[id].name<<" used "<<p[id].c[i]<<",now p="<<P<<".\n"; p[id].c[i]=sk[top++]; p[id].tag=0; pd=1; return; } } } if(!pd){ for(int i=1;i<=3;++i){ int x=SK(p[id].c[i]); if(p[id].c[i][0]=='A'){ x=P*1.0+x; if(x==max){ P=x; std::cout<<p[id].name<<" used "<<p[id].c[i]<<",now p="<<P<<".\n"; p[id].c[i]=sk[top++]; p[id].tag=0; pd=1; return; } } } } if(!pd){ for(int i=1;i<=3;++i){ int x=SK(p[id].c[i]); if(p[id].c[i][0]=='B'){ x=P-x; if(x==max){ P=x; std::cout<<p[id].name<<" used "<<p[id].c[i]<<",now p="<<P<<".\n"; p[id].c[i]=sk[top++]; p[id].tag=0; pd=1; return; } } } } if(!pd){ for(int i=1;i<=3;++i){ int x=SK(p[id].c[i]); if(p[id].c[i].size()<=3&&p[id].c[i][0]=='D'){ x=std::floor(P*1.0/x); if(x==max){ P=x; std::cout<<p[id].name<<" used "<<p[id].c[i]<<",now p="<<P<<".\n"; p[id].c[i]=sk[top++]; p[id].tag=0; pd=1; return; } } } } if(!pd){ for(int i=1;i<=3;++i){ int x=SK(p[id].c[i]); if(p[id].c[i][0]=='E'){ if(x==max){ P=x; std::cout<<p[id].name<<" used "<<p[id].c[i]<<",now p="<<P<<".\n"; p[id].c[i]=sk[top++]; p[id].tag=0; return; } } } } } inline void use(int id){ if(p[id].tag){ for(int i=1;i<=3;++i){ if(p[id].c[i]=="PASS"){ std::cout<<p[id].name<<" used PASS,now p="<<P<<".\n"; p[id].c[i]=sk[top++]; p[id].tag=0; p[ne(now)].tag=1; return; } } for(int i=1;i<=3;++i){ if(p[id].c[i]=="TURN"){ std::cout<<p[id].name<<" used TURN,now p="<<P<<".\n"; tag*=-1; p[id].c[i]=sk[top++]; p[id].tag=0; p[ne(now)].tag=1; return; } } for(int i=1;i<=3;++i){ if(p[id].c[i]=="DOUBLE"){ std::cout<<p[id].name<<" used DOUBLE,now p="<<P<<".\n"; p[ne(now)].tag=1; p[id].c[i]=sk[top++]; p[id].tag=0; return; } } int min=100; for(int i=1;i<=3;++i){ if(p[id].c[i].size()<=3){ int x=SK(p[id].c[i]); if(p[id].c[i][0]=='A'){ x+=P; if(x<=99)min=std::min(x,min); }if(p[id].c[i][0]=='B'){ x=P-x; if(x<=99)min=std::min(x,min); }if(p[id].c[i][0]=='C'){ x=P*x; if(x<=99)min=std::min(x,min); }if(p[id].c[i].size()<=3&&p[id].c[i][0]=='D'){ x=std::floor(P*1.0/x); if(x<=99)min=std::min(x,min); }if(p[id].c[i][0]=='E'){ min=std::min(x,min); } } } if(min>99){ std::cout<<p[id].name<<" lost the game.\n"; p[id].c[1]=sk[top++];p[id].c[2]=sk[top++];p[id].c[3]=sk[top++]; end=1; return ; } int pd=0; for(int i=1;i<=3;++i){ int x=SK(p[id].c[i]); if(p[id].c[i].size()<=3&&p[id].c[i][0]=='D'){ x=std::floor(P*1.0/x); if(x==min){ P=x; std::cout<<p[id].name<<" used "<<p[id].c[i]<<",now p="<<P<<".\n"; p[id].c[i]=sk[top++]; p[id].tag=0; pd=1; break; } } } if(!pd){ for(int i=1;i<=3;++i){ int x=SK(p[id].c[i]); if(p[id].c[i][0]=='B'){ x=P-x; if(x==min){ P=x; std::cout<<p[id].name<<" used "<<p[id].c[i]<<",now p="<<P<<".\n"; p[id].c[i]=sk[top++]; p[id].tag=0; pd=1; break; } } } } if(!pd){ for(int i=1;i<=3;++i){ int x=SK(p[id].c[i]); if(p[id].c[i][0]=='A'){ x=P*1.0+x; if(x==min){ P=x; std::cout<<p[id].name<<" used "<<p[id].c[i]<<",now p="<<P<<".\n"; p[id].c[i]=sk[top++]; p[id].tag=0; pd=1; break; } } } } if(!pd){ for(int i=1;i<=3;++i){ int x=SK(p[id].c[i]); if(p[id].c[i][0]=='C'){ x=P*x; if(x==min){ P=x; std::cout<<p[id].name<<" used "<<p[id].c[i]<<",now p="<<P<<".\n"; p[id].c[i]=sk[top++]; p[id].tag=0; pd=1; break; } } } } if(!pd){ for(int i=1;i<=3;++i){ int x=SK(p[id].c[i]); if(p[id].c[i][0]=='E'){ if(x==min){ P=x; std::cout<<p[id].name<<" used "<<p[id].c[i]<<",now p="<<P<<".\n"; p[id].c[i]=sk[top++]; p[id].tag=0; break; } } } } useno(id); }else{useno(id);} } signed main(){ // freopen("P7506_10.in","r",stdin);freopen("out.out","w",stdout); std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0); std::cin>>n>>m>>k; for(int i=1;i<=n;++i)std::cin>>p[i].name>>p[i].c[1]>>p[i].c[2]>>p[i].c[3]; for(int i=1;i<=k;++i)std::cin>>sk[++top]; top=1;tag=1;now=1; for(int i=1;i<=m;++i){ std::cout<<"Round "<<i<<":"<<'\n'; while(1){ use(now); if(end){ end=0;tag=1;P=0; for(int j=1;j<=n;++j)p[j].tag=0; break; } now=ne(now); } } }
T2 mine (CF404D Minesweeper 1D )
设
设
特别的,
一些非法状态不需要考虑。
点击查看代码
#include<bits/stdc++.h> #define int long long typedef long long ll; typedef unsigned long long ull; inline int read(){char ch=getchar();int x=0,f=1;for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<3)+(x<<1)+(ch^48);return x*f;} const int N=1e6+10,mod=1e9+7; char s[N]; int a[N],f[N][4][4]; inline int mo(int x){return x<0?(x%mod+mod)%mod:(x>=mod?x%mod:x);} signed main(){ // freopen("in.in","r",stdin);freopen("out.out","w",stdout); std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0); std::cin>>s+1; int n=strlen(s+1); for(int i=1;i<=n;++i){ a[i]=s[i]-'0'; if(s[i]=='*')a[i]=3; if(s[i]=='?')a[i]=4; } if(!a[1]||a[1]==4){ f[1][0][0]=1; }if(a[1]==1||a[1]==4){ f[1][0][1]=1; }if(a[1]==3||a[1]==4){ f[1][1][3]=1; } for(int i=2;i<=n;++i){ if(!a[i]||a[i]==4){ f[i][0][0]=mo(f[i-1][0][0]+f[i-1][3][1]); } if(a[i]==1||a[i]==4){ f[i][0][1]=f[i-1][0][0]; f[i][1][1]=f[i-1][3][1]; f[i][3][1]=mo(f[i-1][1][3]+f[i-1][2][3]+f[i-1][3][3]); } if(a[i]==2||a[i]==4){ f[i][3][2]=mo(f[i-1][1][3]+f[i-1][2][3]+f[i-1][3][3]); } if(a[i]==3||a[i]==4){ f[i][1][3]=mo(f[i-1][0][1]+f[i-1][1][1]); f[i][2][3]=f[i-1][3][2]; f[i][3][3]=mo(f[i-1][1][3]+f[i-1][2][3]+f[i-1][3][3]); } } std::cout<<mo(f[n][0][0]+f[n][3][1]+f[n][1][3]+f[n][2][3]+f[n][3][3])<<'\n'; }
T3 小凯的疑惑
根据裴蜀定理,不定方程
对于互质的,
所以对于每一个余数考虑,假设
所以最后就是求这个
赛时写了
T4 春节十二响
首先考虑策略,对于一条链的,显然是将左右两边候选的排好序后,贪心的大的匹配大的,小的匹配小的。很容易扩展到树上。
考虑对于每一个节点建立一个优先队列
正确性比较显然,但是时间复杂度是可以卡到
具体来说,用
点击查看代码
#include<bits/stdc++.h> #define int long long typedef long long ll; typedef unsigned long long ull; inline int read(){char ch=getchar();int x=0,f=1;for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<3)+(x<<1)+(ch^48);return x*f;} const int N=2e5+10; int n,w[N],po[N]; std::vector<int> e[N],v1,v2,v3; std::priority_queue<int> q[N]; inline void dfs(int u){ for(int v:e[u]){ dfs(v); int l=po[u],r=po[v]; if(q[l].size()<q[r].size()){std::swap(po[u],po[v]),std::swap(l,r);} while(!q[l].empty()&&!q[r].empty()){ int x=q[l].top(),y=q[r].top();q[l].pop(),q[r].pop(); v3.push_back(std::max(x,y)); } for(int x:v3)q[l].push(x); v3.clear(); } q[po[u]].push(w[u]); } signed main(){ // freopen("in.in","r",stdin);freopen("out.out","w",stdout); std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0); n=read(); for(int i=1;i<=n;++i)po[i]=i; for(int i=1;i<=n;++i)w[i]=read(); for(int i=2;i<=n;++i){ e[read()].push_back(i); } dfs(1); int ans=0; while(!q[po[1]].empty()){ ans+=q[po[1]].top();q[po[1]].pop(); } std::cout<<ans<<'\n'; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)