zoukankan      html  css  js  c++  java
  • UESTC 1300 Easy Problem 水题

    Easy Problem

    Time Limit: 1000/1000MS (Java/Others)     Memory Limit: 131072/131072KB (Java/Others)
     

    Given n strings Ai, Each string has a non-negative cost Ci.

    Let’s define the function of string 
    s
    f(s)=ni=1Citot(s,i)f(s)=∑i=1nCi∗tot(s,i)

    tot(s,i)      represents the number of occurrences of s in Ai

    Find the maximal value of function f(s) over all strings.

    Note that s is not necessary to be some string from A, and its length must be greater than zero.

    Input

    The first line is n (n105), denoting the number of strings,containing only a to z.

    Then n lines each line is a string Ai.

    Then a line contains n integers Ci.

    The sum of length of all the string will no more than 105

    Ci10000

    Output

    Output one line representing the maximal value.

    Sample input and output

    Sample Input Sample Output
    3
    abc
    abcd
    cdab
    1 2 3
    
    6

    Hint

    Let S be ab, then the value will be 66, it’s the maximal value.


    Source

    The 14th UESTC Programming Contest Preliminary
    在Contests里面的链接。E - Easy Problem
    在Problems里面的链接。Easy Problem

    My Solution

    在队友帮忙debug的情况下。自己还是仅仅Accepted了一个题目(┬_┬)

    字母也能够是字符串 s

    在读入的时候统计好每一个字符串中每一个字母出现的个数  str[maxn][26],然后读入权值以后forfor求出最大值,O(26n)  , 26 * 10^5次不会超时

    最開始的时候字符串用getchar来读取,然后推断是否换行。但linux上用” “推断好像不行,(毕竟不是老司机),WA了几发。

    然后 读入再用strlen()然后记录每一个字母在每一个字符串出现的次数才过了。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cctype>
    using namespace std;
    const int maxn = 100000+8;
    int str[maxn][26], c[maxn];
    char ch[maxn];
    
    int main()
    {
        //freopen("a.txt","r",stdin);
        int n, len;
        long long sum = -1,tsum = 0;
        memset(str, 0, sizeof str);
        scanf("%d", &n);
        for(int i = 1; i <= n; i++){
            scanf("%s", ch);
            len = strlen(ch);
            for(int j = 0; j < len; j++)
                str[i][ch[j] - 'a']++;
        /*    while(true){
                ch=getchar();
                if(isalpha(ch)==0) break;
                str[i][ch - 'a']++;
            }
        */
        }
        for(int i = 1; i <= n; i++)
            scanf("%d", &c[i]);
        for(int i = 0; i < 26; i++){
            tsum = 0;
            for(int j = 1; j <= n; j++){
                tsum += str[j][i]*c[j];
            }
            sum = max(sum, tsum);
        }
        printf("%lld", sum);
        return 0;
    }

    Thank you!

  • 相关阅读:
    ZOJ3329One Person Game(循环型 数学期望)
    ZOJ3551Bloodsucker (数学期望)
    HDU3853LOOPS (师傅逃亡系列•三)(基础概率DP)
    HDU4035 Maze(师傅逃亡系列•二)(循环型 经典的数学期望)
    阿里云DataV专业版发布,为可视化创造更多可能!
    Logtail提升采集性能
    达摩院首席数据库科学家李飞飞:云原生新战场,我们如何把握先机?
    什么是最佳的视频用户体验?阿里云视频服务四大体验优化实践
    Lambda plus: 云上大数据解决方案
    基于大数据的舆情分析系统架构
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7326983.html
Copyright © 2011-2022 走看看