今天的模拟赛就比较常规要稍简单一点(不过我一道都没切满)
01串
我因为傻傻地一个一个地printf,居然T了,下次记得输出整串。
细节较多,分奇偶性讨论
#include<bits/stdc++.h>
using namespace std;
int main() {
// freopen("binary.in","r",stdin);
// freopen("binary.out","w",stdout);
int T;
scanf("%d",&T);
while(T--) {
int n,m;
scanf("%d%d",&n,&m);
if(n==1) {printf("-1\n-1\n");continue;}
if(n&1) {
if(m<2) {printf("-1\n-1\n");continue;}
for(int i=1;i<=n-2;i++) printf("1");
printf("0101");
for(int j=1;j<=m-2;j++) printf("0");
puts("");printf("1");
if((n+m)&1) {
for(int j=1;j<m;j++) printf("0");
printf("10");
for(int i=1;i<=n-2;i++) printf("1");
puts("");
}
else {
for(int j=1;j<=m-2;j++) printf("0");
printf("1010");
for(int i=1;i<=n-3;i++) printf("1");
puts("");
}
}
else {
if(((n+m)&1)&&(m<1)) {printf("-1\n-1\n");continue;}
for(int i=1;i<=n;i++) printf("1");
for(int i=1;i<=m;i++) printf("0");
puts("");
printf("1");
if((n+m)&1) {
for(int j=1;j<m;j++) printf("0");
printf("10");
for(int i=1;i<=n-2;i++) printf("1");
puts("");
}
else {
for(int j=1;j<=m;j++) printf("0");
for(int i=1;i<=n-1;i++) printf("1");
puts("");
}
}
}
return 0;
}
球与盒子
- 题解:模数导致大于某个()的数答案为0,就没注意这点便痛失30pt
- 代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=3e6+5;
vector<int> V[N];
int to[N],cnt[N],b[N],tot;
ll jc[N],mod=500009,ans[N];
bool mark[N];
struct node {int id,x;}a[N];
bool cmp(node u,node v) {return u.x<v.x;}
void init() {
int n=3e6;
jc[0]=1;for(int i=1;i<=n;i++) jc[i]=jc[i-1]*i%mod;
for(int i=1;i<=n;i++) {
for(int j=i;j<=n;j+=i) cnt[j]++;
}
int mx=0;
for(int i=1;i<=n;i++) {
if(!mark[cnt[i]]) b[++tot]=cnt[i];
mark[cnt[i]]=1; V[cnt[i]].push_back(i);
int t=V[cnt[i]].size();
mx=max(mx,t);
}
}
int main() {
// freopen("ball.in","r",stdin);
// freopen("ball.out","w",stdout);
int T;
scanf("%d",&T);
for(int t=1;t<=T;t++)scanf("%d",&a[t].x),a[t].id=t;
init();
sort(a+1,a+1+T,cmp);
for(int i=1;i<=T;i++) {
if(a[i].x>3e6) break;
ll res=1;
for(int j=1;j<=tot;j++) {
int c=b[j],sz=V[c].size();
while(to[c]+1<sz&&V[c][to[c]+1]<=a[i].x) to[c]++;
res=res*jc[to[c]+1]%mod;
}
ans[a[i].id]=res;
}
for(int i=1;i<=T;i++) printf("%lld\n",ans[i]);
return 0;
}
三角查询
- 题解:
三维偏序(第三维类曼哈顿)CDQ板题
排序讲究 - 代码:
#include<bits/stdc++.h>
using namespace std;
const int N=3e6+5;
struct node {int x,y,id,d=0;}q[N],t[N];
int ans[N],c[N];
int lowbit(int x) {return x&(-x);}
void Update(int x,int w) {for(;x<=3e6;x+=lowbit(x)) c[x]+=w;}
int Ask(int x) {int res=0;for(;x;x-=lowbit(x))res+=c[x]; return res;}
void Clear(int x) {for(;x<=3e6;x+=lowbit(x))c[x]=0;}
bool cmp(node u,node v) {
if(u.x^v.x)return u.x>v.x;
if(u.y^v.y)return u.y>v.y;
if(u.d^v.d)return u.d<v.d;
}
void _CDQ(int l,int r) {
if(l==r) return;
int mid=(l+r)>>1;
_CDQ(l,mid); _CDQ(mid+1,r);
int i=l,j=mid+1,c=l;
while(c<=r) {
if((j>r)||(i<=mid&&q[i].y>=q[j].y)) {if(!q[i].d){Update(q[i].x+q[i].y,1);}t[c++]=q[i++];}
else {if(q[j].d){ans[q[j].id]+=Ask(q[j].x+q[j].y+q[j].d);}t[c++]=q[j++];}
}
for(int k=l;k<=mid;k++) if(!q[k].d)Clear(q[k].x+q[k].y);
for(int k=l;k<=r;k++) q[k]=t[k];
}
int main() {
// freopen("data.in","r",stdin);
// freopen("data.out","w",stdout);
int n,Q;
scanf("%d%d",&n,&Q);
for(int i=1;i<=n;i++) scanf("%d%d",&q[i].x,&q[i].y);
for(int i=1;i<=Q;i++) scanf("%d%d%d",&q[n+i].x,&q[n+i].y,&q[n+i].d),q[n+i].id=i;
sort(q+1,q+1+n+Q,cmp);
_CDQ(1,n+Q);
for(int i=1;i<=Q;i++) printf("%d\n",ans[i]);
return 0;
}
T4
.未完待续
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人