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
  • 相关阅读:
    hdoj2187:悼念512汶川大地震遇难同胞 (贪心)
    2.0其它之Transform详解,以及UIElement和FrameworkElement的常用属性
    2.0外观之样式, 模板, 视觉状态和视觉状态管理器
    2.0图形之Ellipse, Line, Path, Polygon, Polyline, Rectangle
    2.0控件之ListBox, MediaElement, MultiScaleImage, PasswordBox, ProgressBar, RadioButton
    2.0画笔之SolidColorBrush, ImageBrush, VideoBrush, LinearGradientBrush, RadialGradientBrush
    2.0图形之基类System.Windows.Shapes.Shape
    2.0交互之鼠标事件和键盘事件
    2.0控件之ScrollViewer, Slider, StackPanel, TabControl, TextBlock, TextBox, ToggleButton
    2.0交互之InkPresenter(涂鸦板)
  • 原文地址:https://www.cnblogs.com/zhonghaoxi/p/3330527.html
Copyright © 2011-2022 走看看