zoukankan      html  css  js  c++  java
  • 【模拟】2017 Multi-University Training Contest 1 The Battle of Chibi

    acm.hdu.edu.cn/showproblem.php?pid=5542

    【Accepted】

      1 #include<iostream>
      2 #include<cstdio>
      3 #include<cstring>
      4 #include<string>
      5 #include<algorithm>
      6 #include<cmath>
      7 
      8 using namespace std;
      9 typedef long long ll;
     10 const ll mod=1e9+7;
     11 const int maxn=1e5+2;
     12 char str[maxn];
     13 ll a[30][maxn];
     14 bool vis[30];
     15 int rk[30];
     16 int l[30]; 
     17 bool lower(int x,int y)
     18 {
     19     if(l[x]!=l[y]) return l[x]<l[y];
     20     for(int i=maxn-1;i>=0;i--)
     21     {
     22         if(a[x][i]!=a[y][i]) return a[x][i]<a[y][i]; 
     23     }
     24     return false;
     25 }
     26 int n;
     27 int main()
     28 {
     29     int cas=0;
     30     while(~scanf("%d",&n))
     31     {
     32         memset(a,0,sizeof(a));
     33         memset(vis,false,sizeof(vis));
     34         memset(l,0,sizeof(l));
     35         for(int i=0;i<n;i++)
     36         {
     37             scanf("%s",str);
     38             int len=strlen(str);
     39             int cnt=0;
     40             for(int k=len-1;k>=0;k--)
     41             {
     42                 a[str[k]-'a'][cnt++]++;
     43             }
     44             if(len!=1)
     45             {
     46                 vis[str[0]-'a']=true; 
     47             }
     48             
     49         }
     50         for(int i=0;i<26;i++)
     51         {
     52             for(int k=0;k<maxn-1;k++)
     53             {
     54                 a[i][k+1]+=(a[i][k]/26);
     55                 a[i][k]=a[i][k]%26;
     56             }
     57             rk[i]=i;
     58         }
     59         for(int i=0;i<26;i++)
     60         {
     61             for(int k=maxn-1;k>=0;k--)
     62             {
     63                 if(a[i][k]>0)
     64                 {
     65                     l[i]=k;
     66                     break;
     67                 }
     68             }
     69         }
     70         for(int i=0;i<26;i++)
     71         {
     72             for(int k=i+1;k<26;k++)
     73             {
     74                 if(lower(rk[k],rk[i]))
     75                 {
     76                     swap(rk[i],rk[k]);
     77                 }
     78             }
     79         }
     80         for(int i=0;i<26;i++)
     81         {
     82             if(!vis[rk[i]])
     83             {
     84                 int x=rk[i];
     85                 for(int k=i-1;k>=0;k--)
     86                 {
     87                     rk[k+1]=rk[k];
     88                 }
     89                 rk[0]=x;
     90                 break;
     91             }
     92         }
     93         ll ans=0;
     94         for(int i=1;i<26;i++)
     95         {
     96             ll now=1;
     97             ll num=0;
     98             for(int k=0;k<=l[rk[i]];k++)
     99             {
    100                 num=(num+(ll)a[rk[i]][k]*now%mod)%mod;
    101                 now=(now*26)%mod;
    102             }
    103             ans=(ans+i*num%mod)%mod;
    104         }
    105         printf("Case #%d: %d
    ",++cas,(int)ans);
    106         
    107     }
    108     return 0;
    109  } 
    View Code
  • 相关阅读:
    axios中put和patch的区别(都是update , put是需要提交整个对象资源,patch是可以修改局部)
    父子组件传值
    springboot+mybatis 配置sql打印日志
    spring cloud eureka
    springAop
    java线程dump分析工具
    02.java并发编程之原子性操作
    01线程的一些方法
    Spring validator常用注解
    Idea报错Command line is too long
  • 原文地址:https://www.cnblogs.com/itcsl/p/7239714.html
Copyright © 2011-2022 走看看