• Codeforces Round #337 (Div.2)


                    A. Pasha and Stick
    time limit per test
    1 second
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    Pasha has a wooden stick of some positive integer length n. He wants to perform exactly three cuts to get four parts of the stick. Each part must have some positive integer length and the sum of these lengths will obviously be n.

    Pasha likes rectangles but hates squares, so he wonders, how many ways are there to split a stick into four parts so that it's possible to form a rectangle using these parts, but is impossible to form a square.

    Your task is to help Pasha and count the number of such ways. Two ways to cut the stick are considered distinct if there exists some integer x, such that the number of parts of length x in the first way differ from the number of parts of length x in the second way.

    Input

    The first line of the input contains a positive integer n (1 ≤ n ≤ 2·109) — the length of Pasha's stick.

    Output

    The output should contain a single integer — the number of ways to split Pasha's stick into four parts of positive integer length so that it's possible to make a rectangle by connecting the ends of these parts, but is impossible to form a square.

    Sample test(s)
    input
    6
    output
    1
    input
    20
    output
    4
    Note

    There is only one way to divide the stick in the first sample {1, 1, 2, 2}.

    Four ways to divide the stick in the second sample are {1, 1, 9, 9}, {2, 2, 8, 8}, {3, 3, 7, 7} and {4, 4, 6, 6}. Note that {5, 5, 5, 5} doesn't work.

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 int main()
     5 {
     6     int n;
     7     int i,j,k;
     8     scanf("%d",&n);
     9     if(n%2==0)
    10     {
    11         int ans=n/4;
    12         if(n%4==0)
    13             ans--;
    14         printf("%d
    ",ans);
    15     }
    16     else
    17         printf("0
    ");
    18 }
    View Code
                    B. Vika and Squares
    time limit per test
    2 seconds
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    Vika has n jars with paints of distinct colors. All the jars are numbered from 1 to n and the i-th jar contains ai liters of paint of color i.

    Vika also has an infinitely long rectangular piece of paper of width 1, consisting of squares of size 1 × 1. Squares are numbered 1, 2, 3and so on. Vika decided that she will start painting squares one by one from left to right, starting from the square number 1 and some arbitrary color. If the square was painted in color x, then the next square will be painted in color x + 1. In case of x = n, next square is painted in color 1. If there is no more paint of the color Vika wants to use now, then she stops.

    Square is always painted in only one color, and it takes exactly 1 liter of paint. Your task is to calculate the maximum number of squares that might be painted, if Vika chooses right color to paint the first square.

    Input

    The first line of the input contains a single integer n (1 ≤ n ≤ 200 000) — the number of jars with colors Vika has.

    The second line of the input contains a sequence of integers a1, a2, ..., an (1 ≤ ai ≤ 109), where ai is equal to the number of liters of paint in the i-th jar, i.e. the number of liters of color i that Vika has.

    Output

    The only line of the output should contain a single integer — the maximum number of squares that Vika can paint if she follows the rules described above.

    Sample test(s)
    input
    5
    2 4 2 3 3
    output
    12
    input
    3
    5 5 5
    output
    15
    input
    6
    10 10 10 1 10 10
    output
    11
    Note

    In the first sample the best strategy is to start painting using color 4. Then the squares will be painted in the following colors (from left to right): 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5.

    In the second sample Vika can start to paint using any color.

    In the third sample Vika should start painting using color number 5.

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int inf=0x3f3f3f3f;
     4 int a[200005];
     5 int main()
     6 {
     7     int n;
     8     int i,j,k;
     9     scanf("%d",&n);
    10     int mi=inf,ma=0;
    11     for(i=1;i<=n;i++)
    12     {
    13         scanf("%d",&a[i]);
    14         if(a[i]<mi)
    15             mi=a[i];
    16     }
    17     int x=0;
    18     for(i=1;i<=n;i++)
    19     {
    20         if(a[i]==mi)
    21             x=0;
    22         else
    23             x++;
    24         if(x>ma)
    25             ma=x;
    26     }
    27     for(i=1;i<=n;i++)
    28     {
    29         if(a[i]==mi)
    30             break;
    31         x++;
    32         if(x>ma)
    33             ma=x;
    34     }
    35     printf("%I64d
    ",1ll*mi*n+1ll*ma);
    36 }
    View Code
                    C. Harmony Analysis
    time limit per test
    3 seconds
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    The semester is already ending, so Danil made an effort and decided to visit a lesson on harmony analysis to know how does the professor look like, at least. Danil was very bored on this lesson until the teacher gave the group a simple task: find 4 vectors in 4-dimensional space, such that every coordinate of every vector is 1 or  - 1 and any two vectors are orthogonal. Just as a reminder, two vectors in n-dimensional space are considered to be orthogonal if and only if their scalar product is equal to zero, that is:

    .

    Danil quickly managed to come up with the solution for this problem and the teacher noticed that the problem can be solved in a more general case for 2k vectors in 2k-dimensinoal space. When Danil came home, he quickly came up with the solution for this problem. Can you cope with it?

    Input

    The only line of the input contains a single integer k (0 ≤ k ≤ 9).

    Output

    Print 2k lines consisting of 2k characters each. The j-th character of the i-th line must be equal to ' * ' if the j-th coordinate of the i-th vector is equal to  - 1, and must be equal to ' + ' if it's equal to  + 1. It's guaranteed that the answer always exists.

    If there are many correct answers, print any.

    Sample test(s)
    input
    2
    output
    ++**
    +*+*
    ++++
    +**+
    Note

    Consider all scalar products in example:

    • Vectors 1 and 2: ( + 1)·( + 1) + ( + 1)·( - 1) + ( - 1)·( + 1) + ( - 1)·( - 1) = 0
    • Vectors 1 and 3: ( + 1)·( + 1) + ( + 1)·( + 1) + ( - 1)·( + 1) + ( - 1)·( + 1) = 0
    • Vectors 1 and 4: ( + 1)·( + 1) + ( + 1)·( - 1) + ( - 1)·( - 1) + ( - 1)·( + 1) = 0
    • Vectors 2 and 3: ( + 1)·( + 1) + ( - 1)·( + 1) + ( + 1)·( + 1) + ( - 1)·( + 1) = 0
    • Vectors 2 and 4: ( + 1)·( + 1) + ( - 1)·( - 1) + ( + 1)·( - 1) + ( - 1)·( + 1) = 0
    • Vectors 3 and 4: ( + 1)·( + 1) + ( + 1)·( - 1) + ( + 1)·( - 1) + ( + 1)·( + 1) = 0
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 char a[600][600];
     5 int main()
     6 {
     7 
     8     int k,n=1;
     9     int i,j,l;
    10     scanf("%d",&k);
    11     a[1][1]='+';
    12     for(i=1;i<=k;i++)
    13     {
    14         for(j=1;j<=n;j++)
    15         {
    16             for(l=1;l<=n;l++)
    17             {
    18                 a[j][l+n]=a[j][l];
    19             }
    20             for(l=1;l<=n;l++)
    21             {
    22                 if(a[j][l]=='+')
    23                     a[j+n][l]='*';
    24                 else
    25                     a[j+n][l]='+';
    26                 a[j+n][l+n]=a[j][l];
    27             }
    28         }
    29         n=n*2;
    30     }
    31     for(i=1;i<=n;i++)
    32     {
    33         for(j=1;j<=n;j++)
    34         {
    35             printf("%c",a[i][j]);
    36         }
    37         printf("
    ");
    38     }
    39     return 0;
    40 }
    View Code
                    D. Vika and Segments
    time limit per test
    2 seconds
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    Vika has an infinite sheet of squared paper. Initially all squares are white. She introduced a two-dimensional coordinate system on this sheet and drew n black horizontal and vertical segments parallel to the coordinate axes. All segments have width equal to 1 square, that means every segment occupy some set of neighbouring squares situated in one row or one column.

    Your task is to calculate the number of painted cells. If a cell was painted more than once, it should be calculated exactly once.

    Input

    The first line of the input contains a single integer n (1 ≤ n ≤ 100 000) — the number of segments drawn by Vika.

    Each of the next n lines contains four integers x1, y1, x2 and y2 ( - 109 ≤ x1, y1, x2, y2 ≤ 109) — the coordinates of the endpoints of the segments drawn by Vika. It is guaranteed that all the segments are parallel to coordinate axes. Segments may touch, overlap and even completely coincide.

    Output

    Print the number of cells painted by Vika. If a cell was painted more than once, it should be calculated exactly once in the answer.

    Sample test(s)
    input
    3
    0 1 2 1
    1 4 1 2
    0 3 2 3
    output
    8
    input
    4
    -2 -1 2 -1
    2 1 -2 1
    -1 -2 -1 2
    1 2 1 -2
    output
    16
    Note

    In the first sample Vika will paint squares (0, 1), (1, 1), (2, 1), (1, 2), (1, 3), (1, 4), (0, 3) and (2, 3).

      1 #include <bits/stdc++.h>
      2 using namespace std;
      3 const int inf=0x3f3f3f3f;
      4 struct Node
      5 {
      6     int u;
      7     int v;
      8     int h;
      9     int c;
     10 };
     11 
     12 Node a[200005],e[100005],f[100005];
     13 int tree[200005],n,l,m1,m2,num,b[200005];
     14 long long sum;
     15 map <int,int> d;
     16 
     17 void add(int k,int val)
     18 {
     19     while(k<=num)
     20     {
     21         tree[k]+=val;
     22         k+=k&-k;
     23     }
     24 }
     25 
     26 int read(int k)
     27 {
     28     int Sum=0;
     29     while(k)
     30     {
     31         Sum+=tree[k];
     32         k-=k&-k;
     33     }
     34     return Sum;
     35 }
     36 
     37 bool cmp(Node o,Node p)
     38 {
     39     if(o.h!=p.h)
     40     {
     41         return o.h<p.h;
     42     }
     43     else
     44         return o.u<p.u;
     45 }
     46 
     47 bool cmp2(Node o,Node p)
     48 {
     49     if(o.h!=p.h)
     50     {
     51         return o.h<p.h;
     52     }
     53     else
     54     {
     55         return o.c>p.c;
     56     }
     57 }
     58 
     59 void Unite()
     60 {
     61     int i,j,now,newu,newv;
     62     sort(e+1,e+m1+1,cmp);
     63     sort(f+1,f+m2+1,cmp);
     64 
     65     now=inf;
     66     for(i=1;i<=m1;i++)
     67     {
     68         if(e[i].h!=now)
     69         {
     70             //printf("h
    ");
     71             if(now!=inf)
     72             {
     73                 l++;
     74                 a[l].u=now,a[l].h=newu,a[l].c=1;
     75                 l++;
     76                 a[l].u=now,a[l].h=newv,a[l].c=-1;
     77                 sum=sum+newv-newu+1;
     78                 if(d[now]!=1)
     79                 {
     80                     b[++num]=now;d[now]=1;
     81                 }
     82             }
     83             now=e[i].h;
     84             newu=e[i].u,newv=e[i].v;
     85         }
     86         else
     87         {
     88             if(e[i].u<=newv)
     89             {
     90                 newv=max(newv,e[i].v);
     91             }
     92             else
     93             {
     94                 l++;
     95                 a[l].u=now,a[l].h=newu,a[l].c=1;
     96                 l++;
     97                 a[l].u=now,a[l].h=newv,a[l].c=-1;
     98                 sum=sum+newv-newu+1;
     99                 if(d[now]!=1)
    100                 {
    101                     b[++num]=now;d[now]=1;
    102                 }
    103                 newu=e[i].u,newv=e[i].v;
    104             }
    105         }
    106     }
    107     if(now!=inf)
    108     {
    109         l++;
    110         a[l].u=now,a[l].h=newu,a[l].c=1;
    111         l++;
    112         a[l].u=now,a[l].h=newv,a[l].c=-1;
    113         sum=sum+newv-newu+1;
    114         if(d[now]!=1)
    115         {
    116             b[++num]=now;d[now]=1;
    117         }
    118     }
    119     //printf("^%I64d
    ",sum);
    120     now=inf;
    121     for(i=1;i<=m2;i++)
    122     {
    123         if(f[i].h!=now)
    124         {
    125             if(now!=inf)
    126             {
    127                 l++;
    128                 a[l].u=newu,a[l].v=newv,a[l].h=now,a[l].c=0;
    129                 sum=sum+newv-newu+1;
    130                 if(d[newu]!=1)
    131                 {
    132                     b[++num]=newu;d[newu]=1;
    133                 }
    134                 if(d[newv]!=1)
    135                 {
    136                     b[++num]=newv;d[newv]=1;
    137                 }
    138             }
    139             now=f[i].h;
    140             newu=f[i].u,newv=f[i].v;
    141         }
    142         else
    143         {
    144             if(f[i].u<=newv)
    145             {
    146                 newv=max(newv,f[i].v);
    147             }
    148             else
    149             {
    150                 l++;
    151                 a[l].u=newu,a[l].v=newv,a[l].h=now,a[l].c=0;
    152                 sum=sum+newv-newu+1;
    153                 if(d[newu]!=1)
    154                 {
    155                     b[++num]=newu;d[newu]=1;
    156                 }
    157                 if(d[newv]!=1)
    158                 {
    159                     b[++num]=newv;d[newv]=1;
    160                 }
    161                 newu=f[i].u,newv=f[i].v;
    162             }
    163         }
    164     }
    165     if(now!=inf)
    166     {
    167         l++;
    168         a[l].u=newu,a[l].v=newv,a[l].h=now,a[l].c=0;
    169         sum=sum+newv-newu+1;
    170         if(d[newu]!=1)
    171         {
    172             b[++num]=newu;d[newu]=1;
    173         }
    174         if(d[newv]!=1)
    175         {
    176             b[++num]=newv;d[newv]=1;
    177         }
    178     }
    179 }
    180 
    181 int main()
    182 {
    183     int i,j;
    184     int x1,x2,y1,y2;
    185     memset(tree,0,sizeof(tree));d.clear();
    186     m1=0,m2=0,l=0,num=0;  sum=0;
    187 
    188     scanf("%d",&n);
    189     for(i=1;i<=n;i++)
    190     {
    191         scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
    192 
    193         if(x1==x2 && y1!=y2)            //垂直
    194         {
    195             if(y1>y2)
    196                 swap(y1,y2);
    197             m1++;
    198             e[m1].u=y1,e[m1].v=y2,e[m1].h=x1,e[m1].c=1;
    199         }
    200         else                            //水平
    201         {
    202             if(x1>x2)
    203                 swap(x1,x2);
    204             m2++;
    205             f[m2].u=x1,f[m2].v=x2,f[m2].h=y1,f[m2].c=2;
    206         }
    207     }
    208 
    209     Unite();
    210     sort(b+1,b+num+1);
    211     sort(a+1,a+l+1,cmp2);
    212     //printf("%d %d %d %d
    ",m1,m2,num,l);
    213     //printf("%I64d
    ",sum);
    214     for(i=1;i<=l;i++)
    215     {
    216         if(a[i].c==0)
    217         {
    218             int s;
    219             x1=lower_bound(b+1,b+num+1,a[i].u)-b;
    220             x2=lower_bound(b+1,b+num+1,a[i].v)-b;
    221             s=read(x2)-read(x1-1);
    222             //printf("^^%d:%d %d:%d %d
    ",x1,read(x1-1),x2,read(x2),s);
    223             sum=sum-s;
    224         }
    225         else
    226         {
    227             x1=lower_bound(b+1,b+num+1,a[i].u)-b;
    228             //printf("^^^%d %d
    ",x1,a[i].c);
    229             add(x1,a[i].c);
    230         }
    231     }
    232 
    233     printf("%I64d
    ",sum);
    234 
    235 }
    View Code
  • 相关阅读:
    angular 封装http请求、解决跨域问题
    TCP协议数据读取
    Dart里继承extends和实现implements的区别
    MySQL通过frm和ibd恢复表结构和数据的办法【基于Linux和MySQL5.6.23测试】
    Dart里实现可增长List和定长List的runtimeType的toString()的值是一样的功能
    MySQL位判断
    SpringBoot URL参数解析坑
    android 实用抓取手机log方法(均为转载)
    python 创建动态类
    Mac技巧之苹果电脑上将一个软件进程的 CPU 占用率限制在指定范围内:cputhrottle
  • 原文地址:https://www.cnblogs.com/cyd308/p/5140498.html
Copyright © 2020-2023  润新知