CSP 提高组模拟6 题解
T1 花间叔祖
其实是化简数组。赛时94pts,因为少加了abs挂6pts。
题目描述
给你一个序列
部分分
这题拿部分分的就是纯挂分。
正解
思路
首先来个小结论:若
证明如下:
因为
移项,得
将
由于
然后来看题目,发现输出的结果只能是
代码
#include<bits/stdc++.h> using namespace std; #define il inline #define ri register int #define inf 0x3f3f3f3f int a,b[200002],re; int main() { scanf("%d",&a); for(ri i=1;i<=a;i++) { scanf("%d",&b[i]); } for(ri i=2;i<=a;i++) { re=__gcd(abs(b[i]-b[i-1]),re);//细节:要么sort一遍,要么+abs if(re==1) { puts("2"); exit(0); } } puts("1"); return 0; } /* */
T2 合并r
赛时60pts,但这题暴力的极限是75pts。数组开小了挂15pts。
题目描述
给你两个整数
部分分
10pts
特判
?pts
暴搜,反正我没打。
75pts
考虑的
加点边界判定,数组开大,75pts到手。
点击查看代码
#include<bits/stdc++.h> using namespace std; #define il inline #define ri register int #define inf 0x3f3f3f3f const int mod=998244353; int a,b; long long dp[5005][5005]; long long dfs_pro(int x,int y) { if(y>x||y==0) { return 0; } if(x==y) { return 1; } if(dp[x][y]>0) { return dp[x][y]; } long long rn=0; for(ri i=0;i<=y;i++) { rn+=dfs_pro(x-i,(y-i)<<1); rn%=mod; } dp[x][y]=rn; return dp[x][y]; } int main() { scanf("%d%d",&a,&b); printf("%lld",dfs_pro(a,b)); return 0; } /* */
正解
思路
考虑如果当前凑出了
代码
#include<bits/stdc++.h> using namespace std; #define il inline #define ri register int #define inf 0x3f3f3f3f const int mod=998244353; int a,b; long long dp[5005][5005]; int main() { scanf("%d%d",&a,&b); dp[0][0]=1;//初始化 for(ri i=1;i<=a;i++) { for(ri j=i;j>=1;j--)//由于需要调用j*2的值,所以要倒序 { dp[i][j]=dp[i-1][j-1]; if((j<<1)<=i) { dp[i][j]+=dp[i][j<<1]; } dp[i][j]%=mod; } } printf("%lld",dp[a][b]); return 0; } /* */
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】