标签:ima mes 左右 区间 string inline logs ++ efi
/* 原图一定是一棵完全二叉树。 根节点是x,左节点是x*2,右节点是x*2+1 转化为二进制往左右走就很明显了。 */ #include<iostream> #include<cstdio> #include<cstring> #define ll long long using namespace std; int T,x,y,k,ans,pos; inline int read() { int x=0,f=1;char c=getchar(); while(c>‘9‘||c<‘0‘){if(c==‘-‘)f=-1;c=getchar();} while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘;c=getchar();} return x*f; } int main() { freopen("city.in","r",stdin); freopen("city.out","w",stdout); T=read(); while(T--) { x=read();y=read();ans=0; if(x==y){printf("1\n");continue;} while(x!=y) { if(x>y) x/=2,ans++; if(y>x) y/=2,ans++; } printf("%d\n",ans); } return 0; }
/* dp[i][j][k]表示第i个元素经过j次染色变为k颜色的概率。 考虑一段区间,每个元素只有选和不选两个状态,所以概率都为1/2. 转移的时候枚举下一个染不染和染成什么颜色。染成下一种颜色的概率是1/c。 可以看出第一维是没有用的,因为被覆盖次数相同的格子概率是相同的。 */ #include<iostream> #include<cstdio> #include<cstring> #define N 107 using namespace std; int n,m,tot,c,k,t,l,r,cnt[N]; double dp[N][N],ans; inline int read() { int x=0,f=1;char c=getchar(); while(c>‘9‘||c<‘0‘){if(c==‘-‘)f=-1;c=getchar();} while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘;c=getchar();} return x*f; } void DP() { dp[0][1]=1; for(int i=0;i<tot;i++) { for(int j=0;j<c;j++) { dp[i+1][j]+=dp[i][j]/2; for(int x=0;x<c;x++) dp[i+1][(j*x)%c]+=dp[i][j]/(2*c); } } for(int i=1;i<=n;i++) for(int j=0;j<c;j++) ans+=dp[cnt[i]][j]*j; printf("%.3lf\n",ans); } int main() { freopen("paint.in","r",stdin); freopen("paint.out","w",stdout); n=read();c=read();k=read(); for(int i=1;i<=k;i++) { l=read();r=read(); for(int j=l;j<=r;j++) cnt[j]++,tot=max(tot,cnt[j]); }DP(); return 0; }
标签:ima mes 左右 区间 string inline logs ++ efi
原文地址:http://www.cnblogs.com/L-Memory/p/7780753.html