#include<cstdio>#include<iostream>#define RI register int#define CI const int&usingnamespace std;
constint N=20210605;
int pri[N+5],cnt,ans; bool vis[N+5];
inlinevoidinit(CI n){
vis[0]=vis[1]=1; for (RI i=2,j;i<=n;++i)
{
if (!vis[i]) pri[++cnt]=i;
for (j=1;j<=cnt&&i*pri[j]<=n;++j)
if (vis[i*pri[j]]=1,i%pri[j]==0) break;
}
}
intmain(){
init(N); for (RI i=1;i<=N;++i) if (!vis[i])
{
int tmp=i; bool flag=1;
for (;tmp&&flag;tmp/=10) if (vis[tmp%10]) flag=0;
ans+=flag;
}
returnprintf("%d",ans),0;
}
3|0完全日期
细节更多一些的模拟题,答案977
#include<cstdio>#include<iostream>#include<cmath>#define RI register int#define CI const int&usingnamespace std;
constint mouth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int ans;
intmain(){
auto fix=[&](CI y,CI m)
{
if (m!=2) returnfalse;
return y%400==0||(y%4==0&&y%100!=0);
};
auto calc=[&](int x)
{
int ret=0; while (x) ret+=x%10,x/=10; return ret;
};
for (RI y=2001,m,d;y<=2021;++y)
for (m=1;m<=12;++m) for (d=1;d<=mouth[m]+fix(y,m);++d)
{
int cur=calc(y)+calc(m)+calc(d);
int s=sqrt(cur); if (s*s==cur) ++ans;
}
returnprintf("%d",ans),0;
}
4|0最小权值
题目把转移式子给你了,直接记忆化搜索一下即可,复杂度是O(n2)的,答案2653631372
#include<cstdio>#include<iostream>#define RI register int#define CI const int&usingnamespace std;
constint N=2021;
longlong f[N+5];
inlinelonglongF(CI x){
if (f[x]) return f[x]; if (!x) return0; longlong ret=1e18;
for (RI i=0;i<=x-1;++i) ret=min(ret,1+2LL*F(i)+3LL*F(x-1-i)+1LL*i*i*(x-1-i));
return f[x]=ret;
}
intmain(){
returnprintf("%lld",F(N)),0;
}
5|0覆盖
爆搜即可,数据范围不大稍等一会就能跑出来,答案12988816
#include<cstdio>#include<iostream>#define RI register int#define CI const int&usingnamespace std;
constint N=8;
int ans; bool a[N+5][N+5];
inlinevoidDFS(CI cs=0){
if (cs==N*N/2) return (void)(++ans);
RI i,j; for (i=1;i<=N;++i) for (j=1;j<=N;++j) if (!a[i][j]) goto loop;
loop:
if (j+1<=N&&!a[i][j+1]) a[i][j]=a[i][j+1]=1,DFS(cs+1),a[i][j]=a[i][j+1]=0;
if (i+1<=N&&!a[i+1][j]) a[i][j]=a[i+1][j]=1,DFS(cs+1),a[i][j]=a[i+1][j]=0;
}
intmain(){
returnDFS(),printf("%d",ans),0;
}
6|0123
没啥好说的,先一元二次方程解出前面整段的有多少个,然后分别计算即可,复杂度大概是O(1)单组询问
#include<cstdio>#include<iostream>#include<cmath>#define RI register int#define CI const int&usingnamespace std;
constint N=2000000;
int t; longlong l,r,pfx[N+5];
intmain(){
//freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);auto calc=[&](constlonglong& x)
{
int s=(sqrt(1+8LL*x)-1)*0.5;
while (1LL*s*(s+1)/2LL>x) --s;
while (1LL*(s+1)*(s+2)/2LL<=x) ++s;
longlong left=x-1LL*s*(s+1)/2LL;
return pfx[s]+left*(left+1)/2LL;
};
for (RI i=1;i<=N;++i) pfx[i]=pfx[i-1]+1LL*i*(i+1)/2LL;
for (scanf("%d",&t);t;--t) scanf("%lld%lld",&l,&r),printf("%lld\n",calc(r)-calc(l-1));
return0;
}
7|0异或变换
这题一个月之前找规律做的,然后现在暴力的代码找不到了对着最后交的代码看了会好像也看不出啥东西来
大致思路就是通过暴力然后分析最后每一位上的数是原来那些位上数的异或和
然后发现这些位置间大概有某种二进制下拆分开来的规律,我记得当时对着一些小情况看了下就找到了
时间久了都忘完了就体谅下吧,复杂度好像是O(nlogtlogn)的(逃
#include<cstdio>#include<iostream>#include<vector>#define RI register int#define CI const int&usingnamespace std;
constint N=10005;
int n,a[N]; longlong t; char s[N];
intmain(){
//freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout); RI i,j; for (scanf("%d%lld%s",&n,&t,s+1),i=1;i<=n;++i) a[i]=s[i]-'0';
for (i=1;i<=n;++i)
{
vector <int> S,T; S.push_back(i);
for (j=16;~j;--j) if ((t>>j)&1LL)
{
T=S; for (int x:S) if (x-(1<<j)>0) T.push_back(x-(1<<j)); S=T;
}
int ret=0; for (int x:S) ret^=a[x]; putchar(ret+'0');
}
return0;
}
#include<cstdio>#include<iostream>#include<map>#define int long long#define RI register int#define CI const int&#define fi first#define se secondusingnamespace std;
constint mod=998244353;
int n,m,k,x,y,dlt,num,ans; map <int,int> rst;
inlinevoidinc(int& x,CI y){
if ((x+=y)>=mod) x-=mod;
}
inlinevoiddec(int& x,CI y){
if ((x-=y)<0) x+=mod;
}
signedmain(){
//freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout); RI i; for (scanf("%lld%lld%lld",&n,&m,&k),i=1;i<=n;++i)
scanf("%lld",&x),++rst[x],++num,inc(ans,x%mod);
for (i=1;i<=m;++i)
{
scanf("%lld%lld",&x,&y); dlt+=x;
if (x>0)
{
inc(ans,x*num%mod); if (!rst.empty())
{
auto it=--rst.end(); while (it->fi+dlt>k)
{
inc(num,(it->fi+dlt-k)*it->se%mod);
inc(rst[1-dlt],(it->fi+dlt-k)*it->se%mod);
inc(rst[k-dlt],it->se); if (it==rst.begin()) break; else --it;
}
if (it->fi+dlt<=k) ++it; rst.erase(it,rst.end());
}
} else {
dec(ans,-x*num%mod); auto it=rst.begin();
while (it!=rst.end()&&it->fi+dlt<=0)
inc(ans,-(it->fi+dlt)*it->se%mod),dec(num,it->se),++it;
rst.erase(rst.begin(),it);
}
if (y) inc(rst[y-dlt],1),inc(num,1),inc(ans,y%mod);
printf("%lld\n",ans);
}
return0;
}
#include<cstdio>#include<iostream>#define RI register int#define CI const int&usingnamespace std;
constint N=505,mod=998244353;
int n,w,L,R,x,y,z,ans,f[N][N*10],g[N][N*10],pfx[N][N*10];
inlineintsum(CI x,CI y){
return x+y>=mod?x+y-mod:x+y;
}
inlineintsub(CI x,CI y){
return x-y<0?x-y+mod:x-y;
}
intmain(){
//freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout); RI i,j,k; scanf("%d%d%d%d%d%d%d",&n,&w,&L,&R,&x,&y,&z);
for (--x,--y,--n,f[0][0]=i=1;i<=x;++i) for (j=L*i;j<=R*i;++j)
for (k=j-R;k<=j-L;++k) if (k>=L*(i-1)&&k<=R*(i-1)) f[i][j]=sum(f[i][j],f[i-1][k]);
int coef=1; for (i=y+1;i<=n;++i) coef=1LL*coef*(R-L+1)%mod;
for (i=L*x;i<=R*x;++i)
{
longlong tar=1LL*z*(w+i)-w; if (tar<L*y||tar>R*y) continue;
for (j=L*x;j<=R*x;++j) g[x][j]=0; g[x][i]=f[x][i];
for (j=L*x;j<=R*x;++j) pfx[x][j]=sum(pfx[x][j-1],g[x][j]);
for (j=x+1;j<=y;++j) for (k=L*j;k<=R*j;++k)
pfx[j][k]=sum(pfx[j][k-1],g[j][k]=sub(pfx[j-1][min(R*(j-1),k-L)],pfx[j-1][min(R*(j-1),k-R-1)]));
ans=sum(ans,1LL*g[y][tar]*coef%mod);
}
returnprintf("%d",ans),0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2018-05-25 POJ2635
2018-05-25 51Nod 1668 非010串