AtCoder Beginner Contest 126

因为本人rating太低,这场比赛还要记rating就来划水了,果然垫底了。

6题都很水,于是头一次在网赛中AK,不过由于网卡+手速太慢还是成功垫底。

ABE

签到。不贴代码了,因为A考察字符串读入和for循环;B考察if语句的使用;E为这场CF的C题原题

C

枚举掷骰子掷到的点数,然后再暴力搜需要硬币连续朝上的次数,设次数为x,该概率为0.5x/n,所有概率相加即可。注意精度。

#include<bits/stdc++.h>
using namespace std;
int n,k;
double pw[100001],win;
int main()
{
    cin>>n>>k;
    pw[0]=1;
    for(int i=1;i<=n;i++)pw[i]=pw[i-1]*0.5;
    for(int i=1;i<=n;i++)
    {
        double pi=1.0/n;
        int cur=i;
        while(cur<k)cur*=2,pi*=0.5;
        win+=pi;
    }
    printf("%.10lf",win);
}
View Code

D

按照树的深度奇偶性分成黑白色即可。

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+7;
int n,cnt,hd[N],v[N],nxt[N],w[N];
long long d[N];
void adde(int x,int y,int z){v[++cnt]=y,nxt[cnt]=hd[x],w[cnt]=z,hd[x]=cnt;}
void dfs(int u,int fa)
{
    for(int i=hd[u];i;i=nxt[i])
    if(v[i]!=fa)
    {
        d[v[i]]=d[u]+w[i];
        dfs(v[i],u);
    }
}
int main()
{
    scanf("%d",&n);
    for(int i=1,x,y,z;i<n;i++)scanf("%d%d%d",&x,&y,&z),adde(x,y,z),adde(y,x,z);
    dfs(1,0);
    for(int i=1;i<=n;i++)
    {
        int op=d[i]&1;
        printf("%d
",op);
    }
}
View Code

F

发现0~2m-1的所有数异或起来都为0,然后这题就没了。当k=0时,把二者连续起来。反之序列为:0 k 0 …其他数递增排列… 0 …其他数递减排列…

#include<bits/stdc++.h>
using namespace std;
int n,m,k;
int main()
{
    scanf("%d%d",&m,&k);
    if(k>=(1<<m)){puts("-1");return 0;}
    n=(1<<m+1);
    if(m==1&&k==1){puts("-1");return 0;}
    if(!k)
    {
        for(int i=1;i<=n;i++)printf("%d ",(i-1)/2);
        return 0;
    }
    printf("0 %d 0",k);
    for(int i=1;i<(1<<m);i++)if(i!=k)printf(" %d",i);
    printf(" %d",k);
    for(int i=(1<<m)-1;i;i--)if(i!=k)printf(" %d",i);
}
View Code

由于网速原因45min才AK,直接滚到rank55……

已经23:05,rating还是没变化,是不是unrated?

原文地址:https://www.cnblogs.com/hfctf0210/p/10891118.html