6034 模拟(排序)

题意:将‘a‘~‘z‘一一映射到0~25 若string第i位为c则价值f(c)*26^i 给出n个string 问价值最大为?  |s|累加<=1e6

字符c对答案的贡献可以用26进制数来表示 排序后,最大贡献的系数用25,依次..

处理前导0时,排序后从价值最低的选出能作为0的字符

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,int> ii;
const ll mod=1e9+7;
const int N=1e5+5;
struct node{
    char c[N];
    int id;
}a[27];
char s[N];
ll pw[N],lead[27],cnt;
bool cmp(node &a,node &b)
{
    for(int i=N-1;i>0;i--)
    {
        if(a.c[i]!=b.c[i])
            return a.c[i]<b.c[i];
    }
    return a.c[0]<b.c[0];
}
void init()
{
    cnt=0;
    memset(lead,0,sizeof(lead));
    for(int i=0;i<26;i++)
    {
        a[i].id=i;
        for(int j=0;j<N;j++)
            a[i].c[j]=0;
    }
}
int main()
{
    pw[0]=1;
    for(ll i=1;i<N;i++)
        pw[i]=(pw[i-1]*26ll)%mod;
    int n,cas=0;
    while(scanf("%d",&n)!=EOF)
    {
        init();
        while(n--)
        {
            scanf("%s",s);
            int len=strlen(s);
            for(int i=0;s[i];i++)
            {
                if(len>1)
                    lead[s[0]-‘a‘]=1;
                int id=s[i]-‘a‘;
                a[id].c[len-i-1]++;
                int j=len-i-1;
                while(j<N&&a[id].c[j]==26)
                    a[id].c[j]=0,a[id].c[++j]++;        

            }
        }
        sort(a,a+26,cmp);
        ll ans=0,pos=0;
        for(int i=0;i<26;i++)
        {
            if(lead[a[i].id]==0)
            {
                pos=i;
                break;
            }
        }
        for(int i=0;i<26;i++)
        {
            ll x=i;
            if(i==pos)
                x=0;
            else if(i<pos)
                x=i+1;
            for(int j=0;j<N;j++)
            {
                ll res=((((ll)a[i].c[j]*pw[j])%mod)*x)%mod;
                ans=(ans+res)%mod;
            }
        }
        printf("Case #%d: %lld\n",++cas,ans);
    }
    return 0;
}
时间: 2024-10-13 12:25:04

6034 模拟(排序)的相关文章

UVA 10815-Andy&#39;s First Dictionary(字符串模拟+排序+重复删除)

Andy's First Dictionary Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Description Problem B: Andy's First Dictionary Time limit: 3 seconds Andy, 8, has a dream - he wants to produce his very own dictionary. This

ACM学习历程—Hihocoder 1177 顺子(模拟 &amp;&amp; 排序 &amp;&amp; gcd)(hihoCoder挑战赛12)

时间限制:6000ms 单点时限:1000ms 内存限制:256MB   描述 你在赌场里玩梭哈,已经被发了4张牌,现在你想要知道发下一张牌后你得到顺子的概率是多少? 假定赌场使用的是一副牌,四种花色的A.2.3.....J.Q.K共52张,这副牌只发给你了4张,你的剩下一张牌从剩下48张中任意取出一张. 顺子指的是点数连续的五张牌,包括10.J.Q.K.A这种牌型(不包含同花顺,即构成顺子的五张牌花色不能相同).参见:https://zh.wikipedia.org/wiki/%E6%92%B

1080. Graduate Admission (30) (模拟排序啊 ZJU_PAT)

题目链接:http://www.patest.cn/contests/pat-a-practise/1080 It is said that in 2013, there were about 100 graduate schools ready to proceed over 40,000 applications in Zhejiang Province. It would help a lot if you could write a program to automate the adm

go排序

补注: 近来又看 go 的排序, 发现以前对 go 的排序理解的有点浅了. go 的排序思路和 c 和 c++ 有些差别. c 默认是对数组进行排序, c++ 是对一个序列进行排序, go 则更宽泛一些,待排序的可以是任何对象, 虽然很多情况下是一个 slice (分片, 类似于数组),或是包含 slice 的一个对象. 排序(接口)的三个要素: 待排序元素个数 n : 第 i 和第 j 个元素的比较函数 cmp : 第 i 和 第 j 个元素的交换 swap : 乍一看条件 3 是多余的, c

POJ 模拟题集合

http://www.cppblog.com/Uriel/articles/101592.html 感觉这个暑假没有去年有激情啊,,,还没到状态就已经块上学了,,, 真是弱暴了,,,找几道模拟题刷刷... 标加号表示已AC... + 1008   历法,不难 + 1102   不难. + 1028   纯模拟.被题目坑了一下.. 1023   貌似搞了一会儿.. 1051   算是模拟,写得比较麻烦,要细心 1099   跟化学式有关的模拟,有意思,高兴的是这题完全是自己想的AC的.. 1107

sort排序到底怎么排序

sort()方法 sort() 方法在适当的位置对数组的元素进行排序,并返回数组. <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script> var arr=[1,11,2,22,5,4,0]; arr.sort(); alert(arr)://[0,1,11,2,22,4,5] </script&g

P1155 双栈排序

P1155 双栈排序 题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一个元素压入栈S1 操作b 如果栈S1不为空,将S1栈顶元素弹出至输出序列 操作c 如果输入序列不为空,将第一个元素压入栈S2 操作d 如果栈S2不为空,将S2栈顶元素弹出至输出序列 如果一个1~n的排列P可以通过一系列操作使得输出序列为1,2,-,(n-1),n,Tom就称P是一个"可双栈排序排列".例

NOIP2017金秋冲刺训练营杯联赛模拟大奖赛Day2

T1 模拟+排序,先把n个公司贪成合法,再在剩下的天数中找最大值 注意不要统计2-t<0的天数 1 #include <cstdio> 2 #include <vector> 3 #include <iostream> 4 #include <algorithm> 5 #define ll long long 6 using namespace std; 7 long long n,m,s,k,e,t,sz,j,flag=0,ans=0,cnt[200

go语言的排序和搜索

晚上准备动手写点 go 的程序的时候,想起 go 如何排序的问题.排序 sort 是个基本的操作,当然搜索 search 也是.c 提供一个 qsort 和 bsearch,一个快排一个二分查找,不过是使用起来都不方便: c++ 中的 sort 貌似很不错,因为 c++ 支持泛型(或是说模板),所以很多东西使用起来很方便.go 是通过 sort 包提供排序和搜索,因为 go 暂时不支持泛型(将来也不好说支不支持),所以,go 的 sort 和 search 使用起来跟类型是有关的,或是需要像 c