CSP-J2022 复盘
T1 乘方
方法
方法
此处给出方法
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll a,b; int main(){ cin>>a>>b; if(a==1) cout<<1; else{ ll res=1; for(int i=1;i<=b;i++){ res*=a; if(res>1e9){cout<<-1;return 0;} } cout<<res; } return 0; }
T2 解密
思路:
记
根据已知信息,可以推出
而
已知
注意到
继续化简得
综上,
注意如果
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int INF=0x3f3f3f3f; ll k,n,d,e; int main(){ cin>>k; for(int i=1;i<=k;i++){ cin>>n>>d>>e; ll m=n-e*d+2; ll tmp1=m*m-4*n; if(tmp1<0){ cout<<"NO"<<endl; continue; } ll p=(m+sqrt(tmp1))/2; ll q=m-p; if(p>q) swap(p,q); if(p*q==n&&p>0) cout<<p<<" "<<q<<endl; else cout<<"NO"<<endl; } return 0; }
根据这道题,还可以得出一个普遍的结论:
已知
则
T3 逻辑表达式
考场上没有考虑到优化
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int INF=0x3f3f3f3f; string str; int ch1[200009],ch2[200009],t1[200009],t2[200009],ans1,ans2,ans; int solve(int l,int r){ if(l==r) return (str[l]-'0'); if(ch2[r]>=l){ int anst=solve(l,ch2[r]-1); if(anst==1){ ans2++; return 1; } else return solve(ch2[r]+1,r); } else if(ch1[r]>=l){ int anst=solve(l,ch1[r]-1); if(anst==0){ ans1++; return 0; } else return solve(ch1[r]+1,r); } else return solve(l+1,r-1); } int main(){ cin>>str; for(int i=0;i<str.size();i++) ch1[i]=ch2[i]=t1[i]=t2[i]=-1; int flr=0; for(int i=0;i<str.size();i++){ if(str[i]=='(') flr++; if(str[i]==')') flr--; if(str[i]=='&') t1[flr]=i; if(str[i]=='|') t2[flr]=i; ch1[i]=t1[flr]; ch2[i]=t2[flr]; } ans=solve(0,str.size()-1); cout<<ans<<endl<<ans1<<" "<<ans2<<endl; return 0; }
T4 上升点列
我是傻逼。
我把
每个大样例都过了。
#include<bits/stdc++.h> using namespace std; typedef long long ll; struct star{ ll x,y; }; ll n,k,f[509][109]; star s[509]; bool cmp(const star&a,const star&b){ return a.x<b.x||a.x==b.x&&a.y<=b.y; } int main(){ cin>>n>>k; for(ll i=1;i<=n;i++){ cin>>s[i].x>>s[i].y; } sort(s+1,s+1+n,cmp); ll ans=0; for(ll i=1;i<=n;i++){ f[i][k]=1; for(ll j=1;j<i;j++){ if(s[j].x>s[i].x||s[j].y>s[i].y) continue; ll dis=abs(s[i].x-s[j].x)+abs(s[i].y-s[j].y)-1; for(ll l=0;l+dis<=k;l++){ if(f[j][l+dis]){ f[i][l]=max(f[i][l],f[j][l+dis]+dis+1); } } } } for(ll i=1;i<=n;i++){ for(ll j=0;j<=k;j++){ ans=max(ans,f[i][j]+j); } } cout<<ans; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具