Codeforces Round #157 小结

来源:互联网 发布:淘宝极速退款怎么用 编辑:程序博客网 时间:2024/04/29 05:05

原文:http://blog.csdn.net/skyfisherman/article/details/8477718


1. Little Elephant and Chess

这道题一开始想复杂了,因为看漏了条件,每一行都是8个……直接输出就可以了……
[csharp] view plaincopy
  1. # include <cstdio>  
  2. # define rep(i,n) for(int i=0;i<n;i++)  
  3. char a[10]; bool flag=true;  
  4. int main(){  
  5.     rep(i,8){scanf("%s",a); rep(j,7)if(a[j]==a[j+1])flag=false;}  
  6.     puts(flag?"YES":"NO");  
  7. }  

2. Little Elephant and Magic Square

这道题目很简单,sum=给出的数的和/2。
[cpp] view plaincopy
  1. # include <iostream>  
  2. # include <cstdio>  
  3. using namespace std;  
  4.   
  5. int a[3][3],s,t;  
  6.   
  7. int main()  
  8. {  
  9.     for(int i=0;i<3;i++)  
  10.         for(int j=0;j<3;j++)  
  11.             scanf("%d",&a[i][j]),  
  12.             s+=a[i][j];  
  13.     s=s>>1;  
  14.     for(int i=0;i<3;i++){  
  15.         t=s;  
  16.         for(int j=0;j<3;j++)  
  17.             t-=a[i][j];  
  18.         a[i][i]=t;  
  19.     }  
  20.     for(int i=0;i<3;i++){  
  21.         for(int j=0;j<3;j++)  
  22.             printf("%d ",a[i][j]);  
  23.         printf("\n");  
  24.     }  
  25. }  

3. Little Elephant and Bits

删掉第一个出现的0,如果没有则删掉任意一位。
[cpp] view plaincopy
  1. # include <iostream>  
  2. using namespace std;  
  3. string s;  
  4. int main()  
  5. {  
  6.     cin>>s;  
  7.     int p=s.find('0');  
  8.     s.erase(s.begin()+(p==-1?0:p));  
  9.     cout<<s<<endl;  
  10.     return 0;  
  11. }  

4. Little Elephant and Elections


数位DP。。这道题有点意思。

[cpp] view plaincopy
  1. # include <iostream>  
  2. # include <cstdio>  
  3. using namespace std;  
  4. #define Lk(n) (n==4||n==7)  
  5. #define N 12  
  6. #define Mod 1000000007;  
  7. int m,n,cnt[N],F[N][N][2];  
  8. long long ans=0;  
  9.   
  10. void init()  
  11. {  
  12.     scanf("%d",&m);int a[N]={0};  
  13.     for(;m;m/=10)a[++n]=m%10;  
  14.     F[0][0][0]=F[0][0][1]=1;  
  15.     for(int i=1;i<=n;i++)  
  16.         for(int j=0;j<=n;j++){  
  17.             F[i][j][0]=F[i-1][j][0]<<3;  
  18.             if(j)F[i][j][0]+=F[i-1][j-1][0]<<1;  
  19.             for(int k=0;k<a[i];k++)  
  20.                 F[i][j][1]+=F[i-1][j-Lk(k)][0];  
  21.             F[i][j][1]+=F[i-1][j-Lk(a[i])][1];  
  22.         }  
  23.     for(int i=0;i<=n;i++)cnt[i]=F[n][i][1];cnt[0]--;  
  24. }  
  25. void DFS(int dep,int left,long long w)  
  26. {  
  27.     w%=Mod;  
  28.     if(dep==0){ ans+=w;ans%=Mod;return; }  
  29.     for(int i=0;i<=left;i++)  
  30.         if(cnt[i])DFS(dep-1,left-i,w*cnt[i]--),cnt[i]++;  
  31. }  
  32.   
  33. int main()  
  34. {  
  35.     init();  
  36.     for(int i=1;i<=n;i++)  
  37.         if(cnt[i])DFS(6,i-1,cnt[i]);  
  38.     cout<<ans<<endl;  
  39. }  

5. Little Elephant and LCM

[cpp] view plaincopy
  1. # include <iostream>  
  2. # include <cstdio>  
  3. # include <cstring>  
  4. # include <algorithm>  
  5. using namespace std;  
  6. const int maxn=100010;  
  7. const int Mod=1000000007;  
  8. #define For(i,a,b) for(int i=a;i<=b;i++)  
  9. int a[maxn],c[maxn],s[maxn],M;  
  10.   
  11. long long power(long long a,int b)  
  12. {  
  13.     long long t=1;  
  14.     for( ;b;a=a*a%Mod,b>>=1)if(b&1)t=t*a%Mod;  
  15.     return t;  
  16. }  
  17.   
  18. long long res1,res2;  
  19. long long func(int K)  
  20. {  
  21.     int i,m=0;  
  22.     for(i=1;i*i<K;i++)  
  23.         if(K%i==0)  
  24.             c[m++]=i,c[m++]=K/i;  
  25.     if(i*i==K)c[m++]=i;  
  26.     sort(c,c+m);  
  27.       
  28.     c[m]=M+1;res1=res2=1;  
  29.     For(i,0,m-1)res1*=power(i+1,s[c[i+1]]-s[c[i]]),res1%=Mod;  
  30.     c[--m]=M+1;  
  31.     For(i,0,m-1)res2*=power(i+1,s[c[i+1]]-s[c[i]]),res2%=Mod;  
  32.     res1-=res2; return res1<0?res1+Mod:res1;  
  33. }  
  34.   
  35. int main()  
  36. {  
  37.     int n,x; scanf("%d",&n);  
  38.     For(i,1,n){scanf("%d",&x);a[x]++;if(x>M)M=x;}  
  39.     For(i,1,M)s[i+1]=s[i]+a[i];  
  40.       
  41.     long long ans=1;  
  42.     For(i,2,M)ans+=func(i),ans-=ans>Mod?Mod:0;  
  43.     cout<<ans<<endl;  
  44. }  

6. Little Elephant and Broken Sorting

[cpp] view plaincopy
  1. # include <iostream>  
  2. # include <cstdio>  
  3. using namespace std;  
  4. int n,m,x,y,a[1001];  
  5. double F[1001][1001],ans;  
  6. void Mix(double &a, double &b)  
  7. {  
  8.     a=b=(a+b)/2;  
  9. }  
  10.   
  11. int main()  
  12. {  
  13.     scanf("%d%d",&n,&m);  
  14.     for(int i=1;i<=n;i++)scanf("%d",a+i);  
  15.     for(int i=1;i<n;i++)  
  16.         for(int j=i+1;j<=n;j++)  
  17.             F[i][j]=a[i]>a[j],F[j][i]=1-F[i][j];  
  18.     for(int i=0;i<m;i++){  
  19.         scanf("%d%d",&x,&y);  
  20.         Mix(F[x][y],F[y][x]);  
  21.         for(int i=1;i<=n;i++)  
  22.             if(i-x&&i-y)Mix(F[i][x],F[i][y]),Mix(F[x][i],F[y][i]);  
  23.     }  
  24.     for(int i=1;i<n;i++)  
  25.         for(int j=i+1;j<=n;j++)  
  26.             ans+=F[i][j];  
  27.     printf("%.8lf",ans);  
  28. }  

7. Little Elephant and Tree


[cpp] view plaincopy
  1. # include <iostream>  
  2. # include <cstdio>  
  3. # include <vector>  
  4. #define fe(i,n) for(__typeof(n.begin())i=n.begin();i!=n.end();i++)  
  5. using namespace std;  
  6. const int N=100010;  
  7. struct Node{  
  8.     int l,r,w,s;  
  9. }t[N<<2];  
  10.   
  11. vector<int>a[N],c[N];  
  12. int p[N],q[N],L[N],R[N],s[N],z[N];  
  13. int cnt,n,m,x,y;  
  14.   
  15. void update(int x)  
  16. {  
  17.     if(t[x].w)  
  18.         t[x].s=t[x].r-t[x].l+1;  
  19.     else if(t[x].r!=t[x].l)  
  20.         t[x].s=t[x<<1].s+t[x<<1|1].s;  
  21.     else t[x].s=0;  
  22. }  
  23. void build(int x,int l,int r)  
  24. {  
  25.     t[x].l=l,t[x].r=r;  
  26.     if(l==r)return;  
  27.     int m=(l+r)>>1;  
  28.     build(x<<1,l,m);  
  29.     build(x<<1|1,m+1,r);  
  30.     update(x);  
  31. }  
  32. void change(int x,int l,int r,int d)  
  33. {  
  34.     if(t[x].l>r||t[x].r<l)return ;  
  35.     else  
  36.         if(l<=t[x].l&&t[x].r<=r)t[x].w+=d;  
  37.     else  
  38.         change(x<<1,l,r,d),change(x<<1|1,l,r,d);  
  39.     update(x);  
  40. }  
  41. void dfs(int x,int y)  
  42. {  
  43.     L[x]=++cnt;  
  44.     fe(i,a[x])if(*i!=y)dfs(*i,x);  
  45.     R[x]=cnt;  
  46. }  
  47. inline void tcg(int k,int d){change(1,L[k],R[k],d);}  
  48. void DFS(int x,int y)  
  49. {  
  50.     fe(i,c[x])tcg(p[*i],1),tcg(q[*i],1);  
  51.     z[x]=t[1].s;  
  52.     fe(i,a[x])if(*i!=y)DFS(*i,x);  
  53.     fe(i,c[x])tcg(p[*i],-1),tcg(q[*i],-1);  
  54. }  
  55.   
  56. int main()  
  57. {  
  58.     scanf("%d%d",&n,&m);  
  59.     for(int i=1;i<n;i++){  
  60.         scanf("%d%d",&x,&y);  
  61.         a[x].push_back(y);  
  62.         a[y].push_back(x);  
  63.     }  
  64.     dfs(1,0);  
  65.     build(1,1,n);  
  66.     for(int i=0;i<m;i++){  
  67.         scanf("%d%d",p+i,q+i);  
  68.         c[p[i]].push_back(i);  
  69.         c[q[i]].push_back(i);  
  70.     }  
  71.     DFS(1,0);  
  72.     for(int i=1;i<=n;i++)  
  73.         printf("%d ",max(z[i]-1,0));  
  74.     return 0;  
  75. }  
0 0
原创粉丝点击