zoukankan      html  css  js  c++  java
  • Codeforces Round #316 (Div. 2) A B C

    A. Elections
    time limit per test
    1 second
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    The country of Byalechinsk is running elections involving n candidates. The country consists of m cities. We know how many people in each city voted for each candidate.

    The electoral system in the country is pretty unusual. At the first stage of elections the votes are counted for each city: it is assumed that in each city won the candidate who got the highest number of votes in this city, and if several candidates got the maximum number of votes, then the winner is the one with a smaller index.

    At the second stage of elections the winner is determined by the same principle over the cities: the winner of the elections is the candidate who won in the maximum number of cities, and among those who got the maximum number of cities the winner is the one with a smaller index.

    Determine who will win the elections.

    Input

    The first line of the input contains two integers n, m (1 ≤ n, m ≤ 100) — the number of candidates and of cities, respectively.

    Each of the next m lines contains n non-negative integers, the j-th number in the i-th line aij (1 ≤ j ≤ n, 1 ≤ i ≤ m, 0 ≤ aij ≤ 109) denotes the number of votes for candidate j in city i.

    It is guaranteed that the total number of people in all the cities does not exceed 109.

    Output

    Print a single number — the index of the candidate who won the elections. The candidates are indexed starting from one.

    Sample test(s)
    Input
    3 3
    1 2 3
    2 3 1
    1 2 1
    
    Output
    2
    Input
    3 4
    10 10 3
    5 1 6
    2 2 2
    1 5 7
    
    Output
    1

    Note

    Note to the first sample test. At the first stage city 1 chosen candidate 3, city 2 chosen candidate 2, city 3 chosen candidate 2. The winner is candidate 2, he gained 2 votes.

    Note to the second sample test. At the first stage in city 1 candidates 1 and 2 got the same maximum number of votes, but candidate 1 has a smaller index, so the city chose candidate 1. City 2 chosen candidate 3. City 3 chosen candidate 1, due to the fact that everyone has the same number of votes, and 1 has the smallest index. City 4 chosen the candidate 3. On the second stage the same number of cities chose candidates 1 and 3. The winner is candidate 1, the one with the smaller index.



    题意非常坑,大意就是每一个城市给每一个候选人投票,行是城市,列是候选人。每次投票仅仅选最大的,而且编号小的,对于候选人票数同样的情况,也一样,选编号小的。


    #include <iostream>
    #include <algorithm>
    #include <stdio.h>
    #include <string.h>
    #include <queue>
    using namespace std;
    typedef long long ll;
    int main()
    {
        int  n,m;
        ll a[105][105];
        int b[105];
        while(cin>>m>>n)
        {
            memset(a,0,sizeof(a));
            memset(b,0,sizeof(b));
            int i,j;
            for(i=1; i<=n; i++)
                for(j=1; j<=m; j++)
                {
                    cin>>a[i][j];
                }
            int k;
            int max1;
            for(i=1; i<=n; i++)
            {
                 max1=-1;
                for(j=1; j<=m; j++)
                {
                    if(a[i][j]>max1)
                    {
                        max1=a[i][j];
                        k=j;
                    }
                }
                b[k]++;
            }
            max1=-1;
            for(i=1; i<=100; i++)
                if(b[i]>max1)
                    {
                        k=i;
                        max1=b[i];
                    }
            cout<<k<<endl;
        }
        return 0;
    }





    B. Simple Game
    time limit per test
    1 second
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    One day Misha and Andrew were playing a very simple game. First, each player chooses an integer in the range from 1 to n. Let's assume that Misha chose number m, and Andrew chose number a.

    Then, by using a random generator they choose a random integer c in the range between 1 and n (any integer from 1 to n is chosen with the same probability), after which the winner is the player, whose number was closer to c. The boys agreed that if m and a are located on the same distance from c, Misha wins.

    Andrew wants to win very much, so he asks you to help him. You know the number selected by Misha, and number n. You need to determine which value of a Andrew must choose, so that the probability of his victory is the highest possible.

    More formally, you need to find such integer a (1 ≤ a ≤ n), that the probability that is maximal, where c is the equiprobably chosen integer from 1 to n (inclusive).

    Input

    The first line contains two integers n and m (1 ≤ m ≤ n ≤ 109) — the range of numbers in the game, and the number selected by Misha respectively.

    Output

    Print a single number — such value a, that probability that Andrew wins is the highest. If there are multiple such values, print the minimum of them.

    Sample test(s)
    Input
    3 1
    
    Output
    2
    Input
    4 3
    
    Output
    2
    Note

    In the first sample test: Andrew wins if c is equal to 2 or 3. The probability that Andrew wins is 2 / 3. If Andrew chooses a = 3, the probability of winning will be 1 / 3. If a = 1, the probability of winning is 0.

    In the second sample test: Andrew wins if c is equal to 1 and 2. The probability that Andrew wins is 1 / 2. For other choices of a the probability of winning is less.





    yy出来的代码- -
    #include <iostream>
    #include <algorithm>
    #include <stdio.h>
    #include <string.h>
    #include <queue>
    using namespace std;
    typedef long long ll;
    int main()
    {
        int  n,m;
        while(cin>>n>>m)
        {
            if(n==1 &&m==1)
             {
                 cout<<1<<endl;
                 continue;
             }
            if(n>=m)
            {
                if(n/2>=m)
                m+=1;
                else
                m-=1;
                cout<<m<<endl;
            }
            else
            {
            if(m/2>=n)
              n+=1;
              else
              n-=1;
              cout<<n<<endl;
            }
        }
        return 0;
    }




    C. Replacement
    time limit per test
    2 seconds
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    Daniel has a string s, consisting of lowercase English letters and period signs (characters '.'). Let's define the operation of replacement as the following sequence of steps: find a substring ".." (two consecutive periods) in string s, of all occurrences of the substring let's choose the first one, and replace this substring with string ".". In other words, during the replacement operation, the first two consecutive periods are replaced by one. If string s contains no two consecutive periods, then nothing happens.

    Let's define f(s) as the minimum number of operations of replacement to perform, so that the string does not have any two consecutive periods left.

    You need to process m queries, the i-th results in that the character at position xi (1 ≤ xi ≤ n) of string s is assigned value ci. After each operation you have to calculate and output the value of f(s).

    Help Daniel to process all queries.

    Input

    The first line contains two integers n and m (1 ≤ n, m ≤ 300 000) the length of the string and the number of queries.

    The second line contains string s, consisting of n lowercase English letters and period signs.

    The following m lines contain the descriptions of queries. The i-th line contains integer xi and ci (1 ≤ xi ≤ n, ci — a lowercas English letter or a period sign), describing the query of assigning symbol ci to position xi.

    Output

    Print m numbers, one per line, the i-th of these numbers must be equal to the value of f(s) after performing the i-th assignment.

    Sample test(s)
    Input
    10 3
    .b..bz....
    1 h
    3 c
    9 f
    
    Output
    4
    3
    1
    
    Input
    4 4
    .cc.
    2 .
    3 .
    2 a
    1 a
    
    Output
    1
    3
    1
    1
    
    Note

    Note to the first sample test (replaced periods are enclosed in square brackets).

    The original string is ".b..bz....".

    • after the first query f(hb..bz....) = 4    ("hb[..]bz...."  →  "hb.bz[..].."  →  "hb.bz[..]."  →  "hb.bz[..]"  →  "hb.bz.")
    • after the second query f(hbс.bz....) = 3    ("hbс.bz[..].."  →  "hbс.bz[..]."  →  "hbс.bz[..]"  →  "hbс.bz.")
    • after the third query f(hbс.bz..f.) = 1    ("hbс.bz[..]f."  →  "hbс.bz.f.")

    Note to the second sample test.

    The original string is ".cc.".

    • after the first query: f(..c.) = 1    ("[..]c."  →  ".c.")
    • after the second query: f(....) = 3    ("[..].."  →  "[..]."  →  "[..]"  →  ".")
    • after the third query: f(.a..) = 1    (".a[..]"  →  ".a.")
    • after the fourth query: f(aa..) = 1    ("aa[..]"  →  "aa.")



    题意:连续两个点算一个贡献。问的是有多少个贡献。

    算出总贡献。我们考虑改变的字符的前后的情况,推断是否加减。


    #include <iostream>
    #include <algorithm>
    #include <stdio.h>
    #include <string.h>
    #include <queue>
    using namespace std;
    typedef long long ll;
    int main()
    {
        int n,m;
        char s[300005];
        char s1[2];
        while(cin>>n>>m)
        {
            scanf("%s",s+1);
            int i;
            int x;
            int l=strlen(s+1);
            int ans=0;
            for(i=1; i<=l; i++)
            {
                if(s[i]=='.'&&s[i+1]=='.')
                    ans++;
            }
            while(m--)
            {
                cin>>x>>s1[0];
                if((s1[0]=='.'&&s[x]=='.' )||(s1[0]!='.'&&s[x]!='.'))
                {
                    cout<<ans<<endl;
                    continue;
                }
                s[x]=s1[0];
                if(s1[0]!='.' &&s[x-1]=='.')
                    ans--;
                if(s1[0]!='.' &&s[x+1]=='.')
                    ans--;
                if(s1[0]=='.' &&s[x+1]=='.')
                    ans++;
                if(s1[0]=='.'&&s[x-1]=='.')
                    ans++;
                cout<<ans<<endl;
            }
        }
        return 0;
    }



  • 相关阅读:
    Mac下eclipse安装SVN插件
    python中函数参数*args和**kw的区别
    Linux下安装JDK1.8
    SpringBoot Profiles特性
    一张图讲解单机FastDFS图片服务器安装步骤(修订版)
    一张图讲解最少机器搭建FastDFS高可用分布式集群安装说明
    Zookeeper作为配置中心使用说明
    一张图秒懂微服务网络架构
    TestNG的静态方法mock的步骤
    Java中indexOf的用法
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/6957835.html
Copyright © 2011-2022 走看看