zoukankan      html  css  js  c++  java
  • Codeforces 336

    A:

    ……

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<cstring>
     4 #include<algorithm>
     5 
     6 using namespace std;
     7 
     8 int main()
     9 {
    10     int x,y;
    11     scanf("%d%d",&x,&y);
    12     int x1,y1,x2,y2;
    13     x1=0;y1=(abs(y)+abs(x))*(y>0 ? 1 : -1);
    14     x2=(abs(x)+abs(y))*(x>0 ? 1 : -1);y2=0;
    15     if (x1>x2) swap(x1,x2),swap(y1,y2);
    16     printf("%d %d %d %d
    ",x1,y1,x2,y2);
    17 
    18     return 0;
    19 }
    View Code

    B:

    问从下面的圆心走到上面的圆心的平均距离。

    贪心走就行了,只需要注意横坐标差大于2时可以先斜着走完再横着走就行了。

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<cstring>
     4 #include<cmath>
     5 
     6 using namespace std;
     7 
     8 int m,r;
     9 
    10 #define solve(x) (x ? r+rx*(x-1)+(double)(x-1)*(x-1)*r : 0)
    11 
    12 int main()
    13 {
    14     scanf("%d%d",&m,&r);
    15     double rx=sqrt(2.0)*r;
    16     double ans=0;
    17     for (int a=1;a<=m;a++)
    18     {
    19         ans+=r*m+r;
    20         ans+=rx*(m-1);
    21         ans+=solve(a-1)+solve(m-a);
    22     }
    23     printf("%.10lf
    ",ans/m/m);
    24 
    25     return 0;
    26 }
    View Code

    C:

    找出一些数使得它们and起来的lowbit值最大。

    枚举答案贪心选尽量多的数。

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<cstring>
     4 
     5 using namespace std;
     6 
     7 const int maxn=100010;
     8 
     9 int n,z[maxn];
    10 
    11 int main()
    12 {
    13     scanf("%d",&n);
    14     for (int a=1;a<=n;a++)
    15         scanf("%d",&z[a]);
    16     for (int a=31;a>=0;a--)
    17     {
    18         int v=-1;
    19         int cnt=0;
    20         for (int b=1;b<=n;b++)
    21             if ((z[b]>>a)&1)
    22             {
    23                 cnt++;
    24                 if (v==-1) v=z[b];
    25                 else v&=z[b];
    26             }
    27         if (v!=-1 && !(v%(1<<a)))
    28         {
    29             printf("%d
    ",cnt);
    30             for (int b=1;b<=n;b++)
    31                 if ((z[b]>>a)&1) printf("%d ",z[b]);
    32             printf("
    ");
    33             return 0;
    34         }
    35     }
    36     printf("-1
    ");
    37 
    38     return 0;
    39 }
    View Code

    D:

    告诉你字符串中0和1的个数并告诉你最后通过替换得到的数问合法序列数。

    因为1+?=0 00+?=0,所以一位一位的补齐就行了。

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<cstring>
     4 
     5 using namespace std;
     6 
     7 #define inc(a,b) {a+=b;if (a>=mo) a-=mo;}
     8 
     9 const int maxn=200010;
    10 const int mo=1000000007;
    11 
    12 int n,m,g,fac[maxn],inv[maxn];
    13 
    14 int mul(int a,int b)
    15 {
    16     int ans=1;
    17     while (b)
    18     {
    19         if (b&1) ans=(long long)ans*a%mo;
    20         a=(long long)a*a%mo;
    21         b>>=1;
    22     }
    23     return ans;
    24 }
    25 
    26 int main()
    27 {
    28     scanf("%d%d%d",&n,&m,&g);
    29     if (n+m==1)
    30     {
    31         if ((g==0 && n) || (g==1 && m)) printf("1
    ");
    32         else printf("0
    ");
    33         return 0;
    34     }
    35     if (g==1) n--;
    36     if (n<0 || m<0)
    37     {
    38         printf("0
    ");
    39         return 0;
    40     }
    41     fac[0]=1;
    42     for (int a=1;a<=n+m;a++)
    43         fac[a]=(long long)fac[a-1]*a%mo;
    44     for (int a=0;a<=n+m;a++)
    45         inv[a]=mul(fac[a],mo-2);
    46     int ans=0;
    47     while (true)
    48     {
    49         if (n+m>1 && m) inc(ans,(long long)fac[n+m-1]*inv[n]%mo*inv[m-1]%mo);
    50         n--;
    51         if (n<0) break;
    52         if (n+m==1 && m==1) ans++;
    53         if (n+m==0) ans++;
    54         n--;
    55         if (n<0) break;
    56     }
    57     printf("%d
    ",ans);
    58 
    59     return 0;
    60 }
    View Code

    E:

    题意是你每次从给定图形中找出一个三角形染色, 要求该三角形中没有被染过色的部分,问方案数。

    从内向外DP,压位表示每个部分是否有被染过色的三角形,讨论各种情况即可。

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<cstring>
     4 
     5 using namespace std;
     6 
     7 #define inc(a,b) {a+=b;if (a>=mo) a-=mo;}
     8 
     9 const int mo=1000000007;
    10 
    11 int n,k,f[401][210][16],g[16][10][16],h[5][10][2][2][16],num[16];
    12 
    13 int main()
    14 {
    15     scanf("%d%d",&n,&k);
    16     for (int a=0;a<16;a++)
    17         for (int b=0;b<16;b++)
    18         {
    19             static int col[4];
    20             col[0]=col[1]=col[2]=col[3]=0;
    21             int cnt=0;
    22             for (int c=0;c<4;c++)
    23                 col[c]=((a>>c)&1),cnt+=col[c];
    24             bool able=true;
    25             for (int c=0;c<4;c++)
    26                 if ((b>>c)&1)
    27                 {
    28                     if (col[c] || col[(c+1)%4]) able=false;
    29                     col[c]=col[(c+1)%4]=true;
    30                     cnt++;
    31                 }
    32             if (!able) continue;
    33             int news=0;
    34             for (int c=3;c>=0;c--)
    35                 news=(news<<1)|col[c];
    36             f[0][cnt][news]++;
    37         }
    38     for (int a=0;a<16;a++)
    39     {
    40         int b=a,c=0;
    41         while (b)
    42             c+=b&1,b>>=1;
    43          num[a]=c;
    44     }
    45     for (int a=0;a<(1<<4);a++)
    46     {
    47         memset(h,0,sizeof(h));
    48         h[1][0][0][0][a]=h[1][1][1][0][a|1]=h[1][2][1][1][a|1]=h[1][1][0][1][a|1]=1;
    49         if (!(a&1)) h[1][1][1][1][a|1]=1;
    50         for (int b=1;b<4;b++)
    51             for (int use=0;use<=8;use++)
    52                 for (int last=0;last<=1;last++)
    53                     for (int first=0;first<=1;first++)
    54                         for (int s=0;s<16;s++)
    55                             if (h[b][use][last][first][s])
    56                                 for (int use1=0;use1<2;use1++)
    57                                     for (int use2=0;use2<2;use2++)
    58                                     {
    59                                         if (!use1 && !use2 && !((s>>b)&1)) inc(h[b+1][use+1][1][first][s|(1<<b)],h[b][use][last][first][s]);
    60                                         inc(h[b+1][use+use1+use2][use2][first][s|((use1|use2)<<b)],h[b][use][last][first][s]);
    61                                         if (!last && !use1) inc(h[b+1][use+1+use2][use2][first][s|(1<<b)|(1<<(b-1))],h[b][use][last][first][s]);
    62                                         if (!use1 && !use2 && !((s>>b)&1) && !((s>>(b-1))&1)) inc(h[b+1][use+1][1][first|(b==1)][s|(1<<b)|(1<<(b-1))],h[b][use][last][first][s]);
    63                                     }
    64         for (int use=0;use<=8;use++)
    65             for (int s=0;s<16;s++)
    66                 inc(h[4][use+1][1][1][s|9],h[4][use][0][0][s]);
    67         for (int use=0;use<=8;use++)
    68             for (int s=0;s<16;s++)
    69                 if (!(s&1) && !(s&8)) inc(h[4][use+1][1][1][s|9],h[4][use][0][0][s]);
    70         for (int use=0;use<=8;use++)
    71             for (int last=0;last<=1;last++)
    72                 for (int first=0;first<=1;first++)
    73                     for (int s=0;s<16;s++)
    74                         inc(g[a][use][s],h[4][use][last][first][s]);
    75     }
    76     for (int a=0;a<2*n;a++)
    77         for (int b=0;b<=k;b++)
    78             for (int c=0;c<16;c++)
    79                 if (f[a][b][c])
    80                     if (a&1)
    81                     {
    82                         for (int delta=0;delta<=8;delta++)
    83                             for (int s=0;s<16;s++)
    84                                 inc(f[a+1][b+delta][s],(long long)f[a][b][c]*g[c][delta][s]%mo);
    85                     }
    86                     else
    87                     {
    88                         for (int d=0;d<16;d++)
    89                             inc(f[a+1][b+num[d]][c|d],f[a][b][c]);
    90                     }
    91     int ans=0;
    92     for (int a=0;a<16;a++)
    93         inc(ans,f[2*n][k][a]);
    94     for (int a=1;a<=k;a++)
    95         ans=(long long)ans*a%mo;
    96     printf("%d
    ",ans);
    97 
    98     return 0;
    99 }
    View Code
  • 相关阅读:
    2010年10月全球web服务器调查
    Orchard 发布1.0版本和ASP.NET MVC 3 RTM
    推荐一个在Linux/Unix上架设ASP.NET的 WEB服务器Jexus
    Windows Azure 的成本架构
    RavenDB系列教程
    Mono环境下不支持中文的解决方法
    IIS 7.0的六大安全新特性为你的Web服务器保驾护航
    Windows 7 Phone 文档数据库Rapid Repository正式发布
    使用log4Net 输出日志到mongodb
    Ubuntu & Fedora Mono 2.8 安装脚本
  • 原文地址:https://www.cnblogs.com/zhonghaoxi/p/3330527.html
Copyright © 2011-2022 走看看