zoukankan      html  css  js  c++  java
  • 2017 Multi-University Training Contest

    hdu 6033

     1 pragma comment(linker, "/STACK:102400000,102400000")
     2 #include <cstdio>
     3 #include <iostream>
     4 #include <cstdlib>
     5 #include <cstring>
     6 #include <algorithm>
     7 #include <cmath>
     8 #include <cctype>
     9 #include <map>
    10 #include <set>
    11 #include <queue>
    12 #include <bitset>
    13 #include <string>
    14 #include <complex>
    15 #define ll __int64
    16 #define mod 1000000007
    17 using namespace std;
    18 int  n;
    19 int main()
    20 {
    21     int t=0;
    22     while(scanf("%d",&n)!=EOF){
    23     printf("Case #%d: %d
    ",++t,(int)(n*(log(2)/log(10))));
    24     }
    25     return 0;
    26 }

    hdu 6034

      1 #pragma comment(linker, "/STACK:102400000,102400000")
      2 #include <cstdio>
      3 #include <iostream>
      4 #include <cstdlib>
      5 #include <cstring>
      6 #include <algorithm>
      7 #include <cmath>
      8 #include <cctype>
      9 #include <map>
     10 #include <set>
     11 #include <queue>
     12 #include <bitset>
     13 #include <string>
     14 #include <complex>
     15 #define ll long long
     16 #define mod 1000000007
     17 using namespace std;
     18 int n;
     19 char a[100005];
     20 map<char,int>mp;
     21 int num[26][100005];
     22 int ans[26];
     23 struct node
     24 {
     25     char what;
     26     int maxn;
     27 } N[26];
     28 bool cmp(struct node aa,struct node bb)
     29 {
     30     if(aa.maxn>bb.maxn)
     31         return true;
     32     else
     33     {
     34         if(aa.maxn==bb.maxn)
     35         {
     36             for(int j=aa.maxn-1; j>=0; j--)
     37             {
     38                 if(num[aa.what-'a'][j]!=num[bb.what-'a'][j])
     39                     return num[aa.what-'a'][j]>num[bb.what-'a'][j];
     40             }
     41         }
     42     }
     43     return false;
     44 }
     45 int main()
     46 {
     47     int s=0;
     48     while(scanf("%d",&n)!=EOF)
     49     {
     50         mp.clear();
     51         for(int i=0; i<=25; i++)
     52         {
     53             memset(num[i],0,sizeof(num[i]));
     54             N[i].what=i+'a';
     55             N[i].maxn=0;
     56             ans[i]=-1;
     57         }
     58         for(int i=1; i<=n; i++)
     59         {
     60             scanf("%s",a);
     61             int lena=strlen(a);
     62             if(lena>1)
     63                 mp[a[0]]=1;
     64             for(int j=0; j<lena; j++)
     65             {
     66                 num[a[j]-'a'][lena-1-j]+=1;
     67                 N[a[j]-'a'].maxn=max(N[a[j]-'a'].maxn,lena-1-j+1);
     68             }
     69         }
     70         for(int i=0; i<=25; i++)
     71         {
     72             ll be=0;
     73             for(int j=0; j<N[i].maxn; j++)
     74             {
     75                 ll ok=(be+num[i][j])%26;
     76                 be=(be+num[i][j])/26;
     77                 num[i][j]=ok;
     78             }
     79             int jishu=N[i].maxn;
     80             while(be>0)
     81             {
     82                 num[i][jishu]=be%26;
     83                 be/=26;
     84                 jishu++;
     85             }
     86             N[i].maxn=jishu;
     87         }
     88 
     89         sort(N,N+26,cmp);
     90         for(int i=25; i>=0; i--)
     91         {
     92             if(mp[N[i].what]==0)
     93             {
     94                 ans[i]=0;
     95                 break;
     96             }
     97         }
     98         int jishu=25;
     99         for(int i=0; i<=25; i++)
    100         {
    101             if(ans[i]==-1)
    102             {
    103                 ans[i]=jishu;
    104                 jishu--;
    105             }
    106         }
    107         ll re=0;
    108         for(int i=0; i<=25; i++)
    109         {
    110             if(ans[i]!=0)
    111             {
    112                 ll gg=1;
    113                 for(int j=0; j<N[i].maxn; j++)
    114                 {
    115                     re=(re+gg*(num[N[i].what-'a'][j]*ans[i])%mod)%mod;
    116                     gg*=26;
    117                     gg%=mod;
    118                 }
    119             }
    120 
    121         }
    122         cout<<"Case #"<<++s<<": "<<re<<endl;
    123     }
    124     return 0;
    125 }

    hdu 6035

      1 #pragma comment(linker, "/STACK:102400000,102400000")
      2 #include <cstdio>
      3 #include <iostream>
      4 #include <cstdlib>
      5 #include <cstring>
      6 #include <algorithm>
      7 #include <cmath>
      8 #include <cctype>
      9 #include <map>
     10 #include <set>
     11 #include <queue>
     12 #include <bitset>
     13 #include <string>
     14 #include <complex>
     15 #define ll long long
     16 #define mod 1000000007
     17 using namespace std;
     18 ll n;
     19 ll pre[200005];
     20 ll used[200005];
     21 ll siz[200005];
     22 ll sum[200005];
     23 ll col[200005];
     24 ll gg[200005];
     25 struct node
     26 {
     27     ll to;;
     28     ll pre;
     29 } N[800005];
     30 ll nedge=0;
     31 ll ans=0;
     32 void init()
     33 {
     34     for(int i=1; i<=n; i++){
     35         pre[i]=0;
     36         used[i]=0;
     37         gg[i]=0;
     38         sum[i]=0;
     39         siz[i]=0;
     40         col[i]=0;
     41     }
     42     nedge=0;
     43 }
     44 void add(ll st,ll ed)
     45 {
     46     nedge++;
     47     N[nedge].to=ed;
     48     N[nedge].pre=pre[st];
     49     pre[st]=nedge;
     50 }
     51 void dfs(ll root)
     52 {
     53     used[root]=1;
     54     siz[root]=1;
     55     ll be=sum[col[root]];
     56     ll ad=0;
     57     for(int i=pre[root]; i; i=N[i].pre)
     58     {
     59         if(used[N[i].to]==0)
     60         {
     61             dfs(N[i].to);
     62             siz[root]+=siz[N[i].to];
     63             ll sonu=sum[col[root]]-be;
     64             ll tmp=siz[N[i].to]-sonu;
     65             ad+=sonu;
     66             ans=ans-tmp*(tmp-1)/2;
     67             be=sum[col[root]];
     68         }
     69 
     70     }
     71      sum[col[root]]+=(siz[root]-ad);
     72 }
     73 int main()
     74 {
     75     //freopen("input.txt","r",stdin);
     76     //freopen("output.txt","w",stdout);
     77     int t=0;
     78     while(scanf("%lld",&n)!=EOF)
     79     {
     80         init();
     81         ll jishu=0;
     82         for(int i=1; i<=n; i++){
     83             scanf("%lld",&col[i]);
     84             if(gg[col[i]]==0){
     85                 jishu++;
     86                 gg[col[i]]=1;
     87             }
     88             }
     89         ll a,b;
     90         for(int i=1; i<n; i++)
     91         {
     92             scanf("%lld %lld",&a,&b);
     93             add(a,b);
     94             add(b,a);
     95         }
     96         ans=jishu*(n*(n-1)/2);
     97         dfs(1);
     98         for(int i=1;i<=n;i++){
     99             if(sum[i]!=0){
    100                ll res=n-sum[i];
    101                ans=ans-(res-1)*res/2;
    102             }
    103         }
    104         printf("Case #%d: %lld
    ",++t,ans);
    105     }
    106 return 0;
    107 }

    hdu 6038

     1 #pragma comment(linker, "/STACK:102400000,102400000")
     2 #include <cstdio>
     3 #include <iostream>
     4 #include <cstdlib>
     5 #include <cstring>
     6 #include <algorithm>
     7 #include <cmath>
     8 #include <cctype>
     9 #include <map>
    10 #include <set>
    11 #include <queue>
    12 #include <bitset>
    13 #include <string>
    14 #include <complex>
    15 #define ll long long
    16 #define mod 1000000007
    17 using namespace std;
    18 int n,m;
    19 int a[100005];
    20 int b[100005];
    21 vector<int> aa;
    22 vector<int> bb;
    23 map<int,int>mp;
    24 int main()
    25 {
    26     int t=0;
    27     while(scanf("%d %d",&n,&m)!=EOF)
    28     {
    29         aa.clear();
    30         bb.clear();
    31         mp.clear();
    32         for(int i=0; i<n; i++)
    33             scanf("%d",&a[i]);
    34         for(int j=0; j<m; j++)
    35             scanf("%d",&b[j]);
    36         for(int i=0;i<n;i++)
    37         {
    38             if(mp[i]==0)
    39             {
    40                 int now=1;
    41                 mp[i]=1;
    42                 int s=i;
    43                 while(mp[a[s]]==0){
    44                     now++;
    45                     mp[a[s]]=1;
    46                     s=a[s];
    47                 }
    48                 aa.push_back(now);
    49             }
    50         }
    51         mp.clear();
    52          for(int i=0;i<m;i++)
    53         {
    54             if(mp[i]==0)
    55             {
    56                 int now=1;
    57                 mp[i]=1;
    58                 int s=i;
    59                 while(mp[b[s]]==0){
    60                     now++;
    61                     mp[b[s]]=1;
    62                     s=b[s];
    63                 }
    64                 bb.push_back(now);
    65             }
    66         }
    67         ll ans=1;
    68         for(int i=0;i<aa.size();i++){
    69              ll temp=0;
    70             for(int j=0;j<bb.size();j++){
    71 
    72                 if(aa[i]%bb[j]==0)
    73                   temp+=bb[j];
    74             }
    75              ans=(ans*temp)%mod;
    76         }
    77         printf("Case #%d: %lld
    ",++t,ans);
    78     }
    79     return 0;
    80 }

    hdu 6043

     1 #pragma comment(linker, "/STACK:102400000,102400000")
     2 #include <cstdio>
     3 #include <iostream>
     4 #include <cstdlib>
     5 #include <cstring>
     6 #include <algorithm>
     7 #include <cmath>
     8 #include <cctype>
     9 #include <map>
    10 #include <set>
    11 #include <queue>
    12 #include <bitset>
    13 #include <string>
    14 #include <complex>
    15 #define ll long long
    16 #define mod 1000000007
    17 using namespace std;
    18 ll n,k;
    19 int main()
    20 {
    21     int t=0;
    22    while(scanf("%lld %lld",&n,&k)!=EOF){
    23      if(k<=n)
    24          printf("Case #%d: %lld
    ",++t,k);
    25      else
    26     {
    27        ll now;
    28        ll which;
    29        now=(k-n)/(n-1);
    30        which=(k-n)%(n-1);
    31        if(now%2==0)
    32        {
    33            if(which==0)
    34             printf("Case #%d: %lld
    ",++t,n);
    35            else
    36             printf("Case #%d: %lld
    ",++t,which);
    37        }
    38        else
    39        {
    40            if(which==0)
    41             printf("Case #%d: %lld
    ",++t,n-1);
    42            else
    43             printf("Case #%d: %lld
    ",++t,which);
    44        }
    45     }
    46    }
    47     return 0;
    48 }
  • 相关阅读:
    基础数据类型补充
    编码转换
    is 和 == 的区别
    字典 dict
    列表与元组
    python基础第一节
    poll函数
    基本 TCP 的回射服务器
    文件IO
    base | AtomicIntegerT类
  • 原文地址:https://www.cnblogs.com/hsd-/p/7243313.html
Copyright © 2011-2022 走看看