20230309模拟赛总结

T1


在这里插入图片描述

MIND


据题意,得

i1n1n×12log2ki

其中log2可调用C++内置函数,2的阶乘可以用位运算.

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


简单思考一下,分情况讨论.

  • k>2m1,无解输出1
  • m=1
    • k=1,无解输出1
    • 有解输出0011
  • 形如1,2,3,,2m1,k,2m1,2m2,,3,2,1,k,一定符合题目要求

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;
}

结尾


这次题目都很简单,好像欢乐赛,成绩是rank3。T3赛时想到了,但是自以为地又改错了。(TT)

下次继续加油吧。

posted @   WerChange  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示