• Codeforces Round #395 (Div. 2) 解题报告


    年后恢复训练参加的第一场,表现的不是很好,必须要赶紧振作起来了啊。

    A、B题不再赘述。

    C题

    不要被树的形式吓到,实际上不需要换根DFS,只需要看两顶点颜色不同的线段即可。

     1 #include<stdio.h>
     2 #include<bits/stdc++.h>
     3 #include <iostream>
     4 using namespace std;
     5 typedef long long ll;
     6 typedef unsigned long long ull;
     7 int k=0,n,i;
     8 int color[100005],st[100005],en[100005],ge[100005];
     9 int main()
    10 {
    11     scanf("%d",&n);
    12     for(i=0;i<n-1;i++)
    13     {
    14         scanf("%d %d",&st[i],&en[i]);
    15     }
    16     for(i=1;i<=n;i++)
    17     {
    18         scanf("%d",&color[i]);
    19     }
    20     for(i=0;i<n-1;i++)
    21     {
    22         if(color[st[i]]!=color[en[i]])
    23         {
    24             k++;
    25             ge[st[i]]++;
    26             ge[en[i]]++;
    27         }
    28     }
    29     for(i=1;i<=n;i++)
    30     {
    31         if(ge[i]==k)
    32         {
    33             printf("YES
    ");
    34             printf("%d
    ",i);
    35             return 0;
    36         }
    37     }
    38     printf("NO
    ");
    39     return 0;
    40 }

    D题

    构造法,按矩形左下角横纵坐标奇偶性填颜色即可。(易证这样即可)

     1 #include<stdio.h>
     2 #include<bits/stdc++.h>
     3 #include <iostream>
     4 using namespace std;
     5 typedef long long ll;
     6 typedef unsigned long long ull;
     7 int n;
     8 int lx[500005],ly[500005];
     9 int main()
    10 {
    11     int i,tem1,tem2;
    12     scanf("%d",&n);
    13     for(i=0;i<n;i++)
    14     {
    15         scanf("%d %d %d %d",&lx[i],&ly[i],&tem1,&tem2);
    16         lx[i]=abs(lx[i]);
    17         ly[i]=abs(ly[i]);
    18     }
    19     printf("YES
    ");
    20     for(i=0;i<n;i++)
    21     {
    22         if(lx[i]%2==0&&ly[i]%2==0)
    23             printf("1
    ");
    24         else if(lx[i]%2==1&&ly[i]%2==0)
    25             printf("2
    ");
    26         else if(lx[i]%2==0&&ly[i]%2==1)
    27             printf("3
    ");
    28         else
    29             printf("4
    ");
    30     }
    31 }

    E题

    “ 大概就是,考虑任取Ai和Aj,作差Ai-Aj,这个差的值只和AiAj在等差数列中的位置差有关(d*(pi-pj)%m)。如果位置差pi-pj不同,d*(pi-pj)一定也不同(这里用到了n*2<m)。由于d*1和d*-1会出现n-1次,d*2和d*-2会出现n-2次……,所以可以用差值出现的次数来确定d,确定d之后随便搞了”

     1 #include<stdio.h>
     2 #include<bits/stdc++.h>
     3 #include <iostream>
     4 using namespace std;
     5 typedef long long ll;
     6 typedef unsigned long long ull;
     7 int n,m;
     8 int a[100005],b[100005];
     9 int he_1=0,he_2=0;
    10 int d,x,he,oh;
    11 int fastmi(int n,int m,int k)
    12 {
    13     int re=1;
    14     while(m)
    15     {
    16         if(m&1)
    17         {
    18             re=1LL*re*n%k;
    19         }
    20         m>>=1;
    21         n=1LL*n*n%k;
    22     }
    23     return re;
    24 }
    25 int main()
    26 {
    27     scanf("%d %d",&m,&n);
    28     int i;
    29     for(i=0;i<n;i++)
    30     {
    31         scanf("%d",&a[i]);
    32         he_1=(he_1+a[i])%m;
    33         he_2=(he_2+1LL*a[i]*a[i])%m;
    34     }
    35     if(n==1)
    36     {
    37         printf("%d 0
    ",a[0]);
    38         return 0;
    39     }
    40     if(n==m)
    41     {
    42         printf("0 1
    ");
    43         return 0;
    44     }
    45     sort(a,a+n);
    46     oh=fastmi(n,m-2,m);
    47 //    printf("he1= %d
    ",he_1);
    48 //    printf("he2= %d
    ",he_2);
    49     for(i=1;i<n;i++)
    50     {
    51 //        printf("aishi %d
    ",a[i]);
    52         d=(a[i]-a[0]+m)%m;
    53 ////        printf("%d
    ",fastmi(n,m-2,m));
    54 //        x=1LL*(he_1-(1LL*n*(n-1)/2)%m*d%m+m)%m*oh%m;//算得此时首项
    55 ////        printf("x=%d
    ",x);
    56 //        he=(n*x%m*x%m+1LL*n*(n-1)%m*x%m*d%m+1LL*n*(n-1)*(2*n-1)/6*d%m*d%m)%m;
    57 ////        printf("he=%d
    ",he);
    58 
    59         x=1LL*(he_1-1LL*n*(n-1)/2%m*d%m+m)*oh%m;
    60         int tmp=1LL*n*x%m*x%m;
    61         tmp=(tmp+1LL*n*(n-1)%m*d%m*x%m)%m;
    62         tmp=(tmp+1LL*n*(n-1)*(2*n-1)/6%m*d%m*d%m)%m;
    63 
    64         if(tmp==he_2)
    65         {
    66             b[0]=x;
    67             for(int j=1;j<n;j++)
    68             {
    69                 b[j]=(b[j-1]+d)%m;
    70             }
    71             sort(b,b+n);
    72             int s;
    73             for(s=0;s<n;s++)
    74             {
    75                 if(b[s]!=a[s])
    76                     break;
    77             }
    78 //            printf("s=%d
    ",s);
    79             if(s==n)
    80             {
    81                 printf("%d %d
    ",x,d);
    82                 return 0;
    83             }
    84         }
    85     }
    86     printf("-1
    ");
    87 
    88 }
     
  • 相关阅读:
    奢想下财务自由吧--理想生活啊
    [翻译] AGG 之贝塞尔插值
    Beginning Silverlight 4 in C#Welcome to Silverlight 4[学习笔记]
    从属性赋值到MVVM模式详解
    Beginning Silverlight 4 in C#Silverlight的布局管理学习笔记
    Beginning Silverlight 4 in C#Silverlight工具包
    不用IDE写C#的Hello World
    NHibernate使用无状态Sessions
    Beginning Silverlight 4 in C#Silverlight控件
    NHibernate使用session.Merge[翻译]
  • 原文地址:https://www.cnblogs.com/quintessence/p/6368873.html
Copyright © 2020-2023  润新知