zoukankan      html  css  js  c++  java
  • 浙南联合训练赛20180129

    数独和dij卡了时间

    A - Keyboard

     CodeForces - 474A 

    Our good friend Mole is trying to code a big message. He is typing on an unusual keyboard with characters arranged in following way:


    qwertyuiop
    asdfghjkl;
    zxcvbnm,./

    Unfortunately Mole is blind, so sometimes it is problem for him to put his hands accurately. He accidentally moved both his hands with one position to the left or to the right. That means that now he presses not a button he wants, but one neighboring button (left or right, as specified in input).

    We have a sequence of characters he has typed and we want to find the original message.

    Input

    First line of the input contains one letter describing direction of shifting ('L' or 'R' respectively for left or right).

    Second line contains a sequence of characters written by Mole. The size of this sequence will be no more than 100. Sequence contains only symbols that appear on Mole's keyboard. It doesn't contain spaces as there is no space on Mole's keyboard.

    It is guaranteed that even though Mole hands are moved, he is still pressing buttons on keyboard and not hitting outside it.

    Output

    Print a line that contains the original message.

    Example

    Input
    R
    s;;upimrrfod;pbr
    Output
    allyouneedislove

    这个题目都不用怎么读吧,就是左移或者右移一位,但是去建立一个映射也挺麻烦,直接找到这个字母输出它的左右两边还行,毕竟qwert键盘没什么规律

    #include<bits/stdc++.h>
    using namespace std;
    string t,c,s="qwertyuiopasdfghjkl;zxcvbnm,./";
    int main()
    {
        cin>>c>>t;
        for(int i=0; t[i]; i++)
        {
            int j=0;
            for(;s[j]&&s[j]!=t[i]; j++);
            if(c=="R")putchar(s[j-1]);
            else putchar(s[j+1]);
        }
        return 0;
    }

    B - Duff and Meat

     CodeForces - 588A 

    Duff is addicted to meat! Malek wants to keep her happy for n days. In order to be happy in i-th day, she needs to eat exactly ai kilograms of meat.

    There is a big shop uptown and Malek wants to buy meat for her from there. In i-th day, they sell meat for pi dollars per kilogram. Malek knows all numbers a1, ..., anand p1, ..., pn. In each day, he can buy arbitrary amount of meat, also he can keep some meat he has for the future.

    Malek is a little tired from cooking meat, so he asked for your help. Help him to minimize the total money he spends to keep Duff happy for n days.

    Input

    The first line of input contains integer n (1 ≤ n ≤ 105), the number of days.

    In the next n lines, i-th line contains two integers ai and pi (1 ≤ ai, pi ≤ 100), the amount of meat Duff needs and the cost of meat in that day.

    Output

    Print the minimum money needed to keep Duff happy for n days, in one line.

    Example

    Input
    3
    1 3
    2 2
    3 1
    Output
    10
    Input
    3
    1 3
    2 1
    3 2
    Output
    8

    Note

    In the first sample case: An optimal way would be to buy 1 kg on the first day, 2 kg on the second day and 3 kg on the third day.

    In the second sample case: An optimal way would be to buy 1 kg on the first day and 5 kg (needed meat for the second and third day) on the second day.

    看提示猜意思,就是找pi最小的,但是有顺序,求一下和,并不会爆LL,1e5*1e2*1e2

    #include <bits/stdc++.h>
    using namespace std;
    long long ans;
    const int N=1e5+5;
    int a[N],p[N];
    int main()
    {
        int n;
        cin>>n;
        cin>>a[1]>>p[1];
        ans+=a[1]*p[1];
        for(int i=2; i<=n; i++)
        {
            cin>>a[i]>>p[i];
            p[i]=min(p[i-1],p[i]);
            ans+=a[i]*p[i];
        }
        cout<<ans<<endl;
        return 0;
    }

    C - Party

     CodeForces - 115A 

    A company has n employees numbered from 1 to n. Each employee either has no immediate manager or exactly one immediate manager, who is another employee with a different number. An employee A is said to be the superior of another employee B if at least one of the following is true:

    • Employee A is the immediate manager of employee B
    • Employee B has an immediate manager employee C such that employee A is the superior of employee C.

    The company will not have a managerial cycle. That is, there will not exist an employee who is the superior of his/her own immediate manager.

    Today the company is going to arrange a party. This involves dividing all nemployees into several groups: every employee must belong to exactly one group. Furthermore, within any single group, there must not be two employees A and B such that A is the superior of B.

    What is the minimum number of groups that must be formed?

    Input

    The first line contains integer n (1 ≤ n ≤ 2000) — the number of employees.

    The next n lines contain the integers pi (1 ≤ pi ≤ n or pi = -1). Every pi denotes the immediate manager for the i-th employee. If pi is -1, that means that the i-th employee does not have an immediate manager.

    It is guaranteed, that no employee will be the immediate manager of him/herself (pi ≠ i). Also, there will be no managerial cycles.

    Output

    Print a single integer denoting the minimum number of groups that will be formed in the party.

    Example

    Input
    5
    -1
    1
    2
    1
    -1
    Output
    3

    Note

    For the first example, three groups are sufficient, for example:

    • Employee 1
    • Employees 2 and 4
    • Employees 3 and 5

    这个题目就是类似并查集,A是B的祖先,B是C的祖先,那么A也是C的祖先。直接遍历每个值就好,就是就是形成一条链,那就是n^2的复杂度,显然没有问题

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int n,a[2005],ans=0;
        cin>>n;
        for(int i=1;i<=n;i++)
        cin>>a[i];
        for(int i=1; i<=n;i++)
        {
            int k=a[i],t=0;
            while(k>0)k=a[k],t++;
            ans=max(t,ans);
        }
        cout<<ans+1;
    }

    D - Mahmoud and a Triangle

     CodeForces - 766B 

    Mahmoud has n line segments, the i-th of them has length ai. Ehab challenged him to use exactly 3 line segments to form a non-degenerate triangle. Mahmoud doesn't accept challenges unless he is sure he can win, so he asked you to tell him if he should accept the challenge. Given the lengths of the line segments, check if he can choose exactly 3 of them to form a non-degenerate triangle.

    Mahmoud should use exactly 3 line segments, he can't concatenate two line segments or change any length. A non-degenerate triangle is a triangle with positive area.

    Input

    The first line contains single integer n (3 ≤ n ≤ 105) — the number of line segments Mahmoud has.

    The second line contains n integers a1, a2, ..., an (1 ≤ ai ≤ 109) — the lengths of line segments Mahmoud has.

    Output

    In the only line print "YES" if he can choose exactly three line segments and form a non-degenerate triangle with them, and "NO" otherwise.

    Example

    Input
    5
    1 5 3 2 4
    Output
    YES
    Input
    3
    4 1 2
    Output
    NO

    Note

    For the first example, he can use line segments with lengths 2, 4 and 5 to form a non-degenerate triangle.

    给你n条边看看能不能生成一个三角形,三边不排序的话就是两边之和大于第三边,两边之差小于第三边

    就是两条较短的边小于第三边

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+5;
    int a[N];
    int main()
    {
        int n,f=0;
        cin>>n;
        for(int i=0; i<n; i++)
            cin>>a[i];
        sort(a,a+n);
        for(int i=2; i<n; i++)
            if(a[i-2]+a[i-1]>a[i])f=1;
        printf("%s
    ",f?"YES":"NO");
    }

    E - Vasya and Petya's Game

     CodeForces - 576A 

    Vasya and Petya are playing a simple game. Vasya thought of number x between 1 and n, and Petya tries to guess the number.

    Petya can ask questions like: "Is the unknown number divisible by number y?".

    The game is played by the following rules: first Petya asks all the questions that interest him (also, he can ask no questions), and then Vasya responds to each question with a 'yes' or a 'no'. After receiving all the answers Petya should determine the number that Vasya thought of.

    Unfortunately, Petya is not familiar with the number theory. Help him find the minimum number of questions he should ask to make a guaranteed guess of Vasya's number, and the numbers yi, he should ask the questions about.

    Input

    A single line contains number n (1 ≤ n ≤ 103).

    Output

    Print the length of the sequence of questions k (0 ≤ k ≤ n), followed by k numbers — the questions yi (1 ≤ yi ≤ n).

    If there are several correct sequences of questions of the minimum length, you are allowed to print any of them.

    Example

    Input
    4
    Output
    3
    2 4 3
    Input
    6
    Output
    4
    2 4 3 5

    Note

    The sequence from the answer to the first sample test is actually correct.

    If the unknown number is not divisible by one of the sequence numbers, it is equal to 1.

    If the unknown number is divisible by 4, it is 4.

    If the unknown number is divisible by 3, then the unknown number is 3.

    Otherwise, it is equal to 2. Therefore, the sequence of questions allows you to guess the unknown number. It can be shown that there is no correct sequence of questions of length 2 or shorter.

    每次猜一个值是否可以被n整除

    这个题目是特判题的,但是我去猜的一定要最少的,我可以利用埃筛去搞,筛素数,一边用素数的j次方去搞,就是所给的样例

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e3+5;
    int a[N];
    vector<int>V;
    int main()
    {
        int n;
        cin>>n;
        for(int i=2; i<=n; i++)
        {
            if(!a[i])
            {
                for(int j=i+i; j<=n; j+=i) a[j]=1;
                for(int j=i; j<=n; j*=i)V.push_back(j);
            }
        }
        printf("%d
    ",V.size());
        for(auto X:V)
            printf("%d ",X);
    }

    F - Dijkstra?

     CodeForces - 20C 

    You are given a weighted undirected graph. The vertices are enumerated from 1 to n. Your task is to find the shortest path between the vertex 1 and the vertex n.

    Input

    The first line contains two integers n and m (2 ≤ n ≤ 105, 0 ≤ m ≤ 105), where n is the number of vertices and m is the number of edges. Following m lines contain one edge each in form aibi and wi (1 ≤ ai, bi ≤ n, 1 ≤ wi ≤ 106), where ai, bi are edge endpoints and wi is the length of the edge.

    It is possible that the graph has loops and multiple edges between pair of vertices.

    Output

    Write the only integer -1 in case of no path. Write the shortest path in opposite case. If there are many solutions, print any of them.

    Example

    Input
    5 6
    1 2 2
    2 5 5
    2 3 4
    1 4 1
    4 3 3
    3 5 1
    Output
    1 4 3 5 
    Input
    5 6
    1 2 2
    2 5 5
    2 3 4
    1 4 1
    4 3 3
    3 5 1
    Output
    1 4 3 5 

    dij,SPFA应该都可以过,输出1到n的最短路径

    每条边都是10^6,会爆int,温馨提示

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const ll INF=1e18;
    const int N=1e5+5;
    int n,m,pre[N];
    vector<pair<ll,int> > G[N];
    vector<int>V;
    ll d[N];
    priority_queue<int> Q;
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=0,u,v,w; i<m; i++)
            scanf("%d%d%d",&u,&v,&w),G[u].push_back(make_pair(w,v)),G[v].push_back(make_pair(w,u));
        fill(d,d+n+1,INF);
        d[1]=0,Q.push(1);
        while(!Q.empty())
        {
            int u=Q.top();
            Q.pop();
            for(pair<ll,int>E:G[u])
            {
                int v=E.second;
                if(d[u]+E.first<d[v])pre[v]=u,d[v]=d[u]+E.first,Q.push(v);
            }
        }
        if(d[n]==INF)printf("-1
    ");
        else
        {
            int now=n;
            while(now)V.push_back(now),now=pre[now];
            reverse(V.begin(),V.end());
            for(auto X:V)printf("%d ",X);
        }
        return 0;
    }

    Little X used to play a card game called "24 Game", but recently he has found it too easy. So he invented a new game.

    Initially you have a sequence of n integers: 1, 2, ..., n. In a single step, you can pick two of them, let's denote them a and b, erase them from the sequence, and append to the sequence either a + b, or a - b, or a × b.

    After n - 1 steps there is only one number left. Can you make this number equal to 24?

    Input

    The first line contains a single integer n (1 ≤ n ≤ 105).

    Output

    If it's possible, print "YES" in the first line. Otherwise, print "NO" (without the quotes).

    If there is a way to obtain 24 as the result number, in the following n - 1 lines print the required operations an operation per line. Each operation should be in form: "a op b = c". Where a and b are the numbers you've picked at this operation; op is either "+", or "-", or "*"; c is the result of corresponding operation. Note, that the absolute value of c mustn't be greater than 1018. The result of the last operation must be equal to 24. Separate operator sign and equality sign from numbers with spaces.

    If there are multiple valid answers, you may print any of them.

    Example

    Input
    1
    Output
    NO
    Input
    8
    Output
    YES
    8 * 7 = 56
    6 * 5 = 30
    3 - 4 = -1
    1 - 2 = -1
    30 - -1 = 31
    56 - 31 = 25
    25 + -1 = 24

    给你1-n,都用上,构造出24

    4的话构造4*3*2*1,其他做差,只用把5也够造出来就行了

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int n;
        cin>>n;
        if(n<4)
            printf("NO");
        else
        {
            printf("YES
    ");
            if(n&1)
            {
                printf("%d + %d = %d
    ",1,2,3);
                printf("%d - %d = %d
    ",5,3,2);
                printf("%d * %d = %d
    ",2,3,6);
                printf("%d * %d = %d
    ",6,4,24);
                for(int i=6;i<n;i+=2)
                    printf("%d - %d = %d
    ",i+1,i,1);
                for(int i=5;i<n;i+=2)
                     printf("%d * %d = %d
    ",1,24,24);
            }
            else
            {
                printf("%d * %d = %d
    ",4,3,12);
                printf("%d * %d = %d
    ",12,2,24);
                for(int i=5;i<n;i+=2)
                    printf("%d - %d = %d
    ",i+1,i,1);
                for(int i=2;i<n;i+=2)
                     printf("%d * %d = %d
    ",1,24,24);
            }
        }
        return 0;
    }

    H - Fox And Names

     CodeForces - 510C 

    Fox Ciel is going to publish a paper on FOCS (Foxes Operated Computer Systems, pronounce: "Fox"). She heard a rumor: the authors list on the paper is always sorted in the lexicographical order.

    After checking some examples, she found out that sometimes it wasn't true. On some papers authors' names weren't sorted in lexicographical order in normal sense. But it was always true that after some modification of the order of letters in alphabet, the order of authors becomes lexicographical!

    She wants to know, if there exists an order of letters in Latin alphabet such that the names on the paper she is submitting are following in the lexicographical order. If so, you should find out any such order.

    Lexicographical order is defined in following way. When we compare s and t, first we find the leftmost position with differing characters: si ≠ ti. If there is no such position (i. e. s is a prefix of t or vice versa) the shortest string is less. Otherwise, we compare characters si and ti according to their order in alphabet.

    Input

    The first line contains an integer n (1 ≤ n ≤ 100): number of names.

    Each of the following n lines contain one string namei (1 ≤ |namei| ≤ 100), the i-th name. Each name contains only lowercase Latin letters. All names are different.

    Output

    If there exists such order of letters that the given names are sorted lexicographically, output any such order as a permutation of characters 'a'–'z' (i. e. first output the first letter of the modified alphabet, then the second, and so on).

    Otherwise output a single word "Impossible" (without quotes).

    Example

    Input
    3
    rivest
    shamir
    adleman
    Output
    bcdefghijklmnopqrsatuvwxyz
    Input
    10
    tourist
    petr
    wjmzbmr
    yeputons
    vepifanov
    scottwu
    oooooooooooooooo
    subscriber
    rowdark
    tankengineer
    Output
    Impossible
    Input
    10
    petr
    egor
    endagorion
    feferivan
    ilovetanyaromanova
    kostka
    dmitriyh
    maratsnowbear
    bredorjaguarturnik
    cgyforever
    Output
    aghjlnopefikdmbcqrstuvwxyz
    Input
    7
    car
    care
    careful
    carefully
    becarefuldontforgetsomething
    otherwiseyouwillbehacked
    goodluck
    Output
    acbdefhijklmnogpqrstuvwxyz

    求是否存在一个字母表,能满足给出的字符串是从小到大给出的!若存在输出此字母表,若不存在,输出Impossible!

    搜索下,标记最长公共前缀之后的字符

    #include<bits/stdc++.h>
    using namespace std;
    int n,v[27],b[27][27],F=1;
    string s,t,ans;
    void dfs(int u)
    {
        v[u]=1;
        for(int i=0; i<26&&F; i++)
        {
            if(b[u][i])
            {
                if(v[i]==1)F=0;
                else if(v[i]!=-1) dfs(i);
            }
        }
        if(!F)return;
        v[u]=-1,ans+=u+'a';
    }
    int main()
    {
        cin>>n>>s;
        for(int i=1; i<n; i++)
        {
            cin>>t;
            int f=1;
            for(int j=0; t[j]&&s[j]; j++)
                if(s[j]!=t[j])
                {
                    f=0,b[t[j]-'a'][s[j]-'a']=1;
                    break;
                }
            if(f&&s.size()>t.size())
            {
                cout<<"Impossible
    ";
                return 0;
            }
            s=t;
        }
        for(int i=0; i<26; i++)if(v[i]!=-1)dfs(i);
        if(!F)cout<<"Impossible
    ";
        else cout<<ans;
        return 0;
    }

    I - Equivalent Strings

     CodeForces - 559B 

    Today on a lecture about strings Gerald learned a new definition of string equivalency. Two strings a and b of equal length are called equivalent in one of the two cases:

    1. They are equal.
    2. If we split string a into two halves of the same size a1 and a2, and string binto two halves of the same size b1 and b2, then one of the following is correct:
      1. a1 is equivalent to b1, and a2 is equivalent to b2
      2. a1 is equivalent to b2, and a2 is equivalent to b1

    As a home task, the teacher gave two strings to his students and asked to determine if they are equivalent.

    Gerald has already completed this home task. Now it's your turn!

    Input

    The first two lines of the input contain two strings given by the teacher. Each of them has the length from 1 to 200 000 and consists of lowercase English letters. The strings have the same length.

    Output

    Print "YES" (without the quotes), if these two strings are equivalent, and "NO" (without the quotes) otherwise.

    Example

    Input
    aaba
    abaa
    Output
    YES
    Input
    aabb
    abab
    Output
    NO

    Note

    In the first sample you should split the first string into strings "aa" and "ba", the second one — into strings "ab" and "aa". "aa" is equivalent to "aa"; "ab" is equivalent to "ba" as "ab" = "a" + "b", "ba" = "b" + "a".

    In the second sample the first string can be splitted into strings "aa" and "bb", that are equivalent only to themselves. That's why string "aabb" is equivalent only to itself and to string "bbaa".

    按照题意所说,如果偶数长度就往下分啊,奇数就返回,因为要比较,所以要选择一个字典序的,因为本来是可以随便加的

    #include<bits/stdc++.h>
    using namespace std;
    string la(string s)
    {
        if(s.size()%2)return s;
        string s1=la(s.substr(0,s.size()/2)),s2=la(s.substr(s.size()/2));
        return s1<s2?(s1+s2):(s2+s1);
    }
    int main()
    {
        string s,c;
        cin>>s>>c;
        printf("%s
    ",la(s)==la(c)?"YES":"NO");
    }
  • 相关阅读:
    ER模型
    一道人人的笔试题
    关系代数运算
    推荐两个不错的CAD二次开发(.Net)手册
    CAD 致命错误
    CAD二次开发(.NET)之PaletteSet和Palette
    养生
    我看面向对象
    .NET中参数化查询数据库
    自定义按照index和key访问的List
  • 原文地址:https://www.cnblogs.com/BobHuang/p/8385905.html
Copyright © 2011-2022 走看看