20230309模拟赛总结
T1
MIND
据题意,得
其中可调用C++内置函数,的阶乘可以用位运算.
CODE
#include<bits/stdc++.h> using namespace std; #define ll long long #define rp(i,o,p) for(ll i=o;i<=p;++i) #define pr(i,o,p) for(ll i=o;i>=p;--i) const ll MAXN=1e5+5; ll n,k; double ans; int main() { scanf("%lld%lld",&n,&k); rp(i,1,n) { ll t=ceil(1.0*log2(ceil(1.0*k/i))); ans+=1.0/n*1.0/(1<<t); } printf("%.12lf\n",ans); return 0; }
T2
MIND
CODE
#include<bits/stdc++.h> using namespace std; #define ll long long #define rp(i,o,p) for(ll i=o;i<=p;++i) #define pr(i,o,p) for(ll i=o;i>=p;--i) const ll MAXN=1e5+5; ll n; bool hve[MAXN]; int vis[MAXN]; // -1:white 0:none 1:black ll sum,en[MAXN<<1],hd[MAXN],lt[MAXN<<1],vl[MAXN<<1]; void add(ll u,ll v,ll w){en[++sum]=v,vl[sum]=w,lt[sum]=hd[u],hd[u]=sum;} int main() { scanf("%lld",&n); rp(i,1,n-1) { ll u,v,w; scanf("%lld%lld%lld",&u,&v,&w); add(u,v,w),add(v,u,w); } queue<ll> q; q.push(1); hve[1]=1; vis[1]=1; while(!q.empty()) { ll u=q.front(); q.pop(); for(ll i=hd[u],v,w;i&&(v=en[i])&&(w=vl[i]);i=lt[i]) { if(!hve[v]&&(hve[v]=1)) q.push(v); if(w&1) vis[v]=-vis[u]; else vis[v]=vis[u]; } } rp(i,1,n) printf("%d\n",(vis[i]==1?1:0)); return 0; }
T3
MIND
同T2,统计连通块的数量.
CODE
#include<bits/stdc++.h> using namespace std; #define ll long long #define rp(i,o,p) for(ll i=o;i<=p;++i) #define pr(i,o,p) for(ll i=o;i>=p;--i) const ll MAXN=1e5+5; ll n,m; ll X[MAXN],Y[MAXN],Z[MAXN]; ll sum,en[MAXN<<1],hd[MAXN],lt[MAXN<<1]; ll d[MAXN],ans; void add(ll u,ll v){en[++sum]=v,lt[sum]=hd[u],hd[u]=sum;} void dfs(ll x) { d[x]=1; for(ll i=hd[x],y;i&&(y=en[i]);i=lt[i]) if(!d[y]) dfs(y); } int main() { scanf("%lld%lld",&n,&m); rp(i,1,m) { scanf("%lld%lld%lld",&X[i],&Y[i],&Z[i]); if(X[i]>Y[i]){ll t=X[i];X[i]=Y[i];Y[i]=t;} add(X[i],Y[i]); add(Y[i],X[i]); } rp(i,1,n) if(!d[i]) ++ans,dfs(i); printf("%lld\n",ans); return 0; }
T4
MIND
简单思考一下,分情况讨论.
- 若,无解输出
- 若
- 若,无解输出
- 有解输出
- 形如,一定符合题目要求
CODE
#include<bits/stdc++.h> using namespace std; #define ll long long #define rp(i,o,p) for(ll i=o;i<=p;++i) #define pr(i,o,p) for(ll i=o;i>=p;--i) const ll MAXM=17,MAXK=1e9,MAXN=(1<<17)+5; ll m,k; ll n; int main() { scanf("%lld%lld",&m,&k); n=(1<<m)-1; if(k>n) printf("-1\n"); else if(m==1) { if(k==1) printf("-1"),0; else printf("0 0 1 1\n"),0; } else { rp(i,0,n) if(i!=k) printf("%lld ",i); printf("%lld ",k); pr(i,n,0) if(i!=k) printf("%lld ",i); printf("%lld ",k); } return 0; }
结尾
这次题目都很简单,好像欢乐赛,成绩是。T3赛时想到了,但是自以为地又改错了。(TT)
下次继续加油吧。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现