因为本人rating太低,这场比赛还要记rating就来划水了,果然垫底了。
6题都很水,于是头一次在网赛中AK,不过由于网卡+手速太慢还是成功垫底。
ABE
签到。不贴代码了,因为A考察字符串读入和for循环;B考察if语句的使用;E为这场CF的C题原题
C
枚举掷骰子掷到的点数,然后再暴力搜需要硬币连续朝上的次数,设次数为x,该概率为0.5x/n,所有概率相加即可。注意精度。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#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); }
D
按照树的深度奇偶性分成黑白色即可。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#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); } }
F
发现0~2m-1的所有数异或起来都为0,然后这题就没了。当k=0时,把二者连续起来。反之序列为:0 k 0 …其他数递增排列… 0 …其他数递减排列…
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#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); }
由于网速原因45min才AK,直接滚到rank55……
已经23:05,rating还是没变化,是不是unrated?