zoukankan      html  css  js  c++  java
  • 2016ACM/ICPC亚洲区沈阳站

    链接:传送门


    A - Thickest Burger - [签到水题]

    ACM ICPC is launching a thick burger. The thickness (or the height) of a piece of club steak is A (1 ≤ A ≤ 100). The thickness (or the height) of a piece of chicken steak is B (1 ≤ B ≤ 100).
    The chef allows to add just three pieces of meat into the burger and he does not allow to add three pieces of same type of meat. As a customer and a foodie, you want to know the maximum total thickness of a burger which you can get from the chef. Here we ignore the thickness of breads, vegetables and other seasonings.

    Input
    The first line is the number of test cases. For each test case, a line contains two positive integers A and B.

    Output
    For each test case, output a line containing the maximum total thickness of a burger.

    Sample Input
    10
    68 42
    1 35
    25 70
    59 79
    65 63
    46 6
    28 82
    92 62
    43 96
    37 28

    Sample Output
    178
    71
    165
    217
    193
    98
    192
    246
    235
    102

    Hint
    Consider the first test case, since 68+68+42 is bigger than 68+42+42 the answer should be 68+68+42 = 178.
    Similarly since 1+35+35 is bigger than 1+1+35, the answer of the second test case should be 1+35+35 = 71.

    题意:

    给出 $a,b$,输出 $max(a+a+b,a+b+b)$。

    AC代码:

    #include<bits/stdc++.h>
    using namespace std;
    int a,b;
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d",&a,&b);
            printf("%d
    ",max(a+a+b,a+b+b));
        }
    }

    B - Relative atomic mass - [签到水题]

    Relative atomic mass is a dimensionless physical quantity, the ratio of the average mass of atoms of an element (from a single given sample or source) to $frac{1}{2}$ of the mass of an atom of carbon-12 (known as the unified atomic mass unit).
    You need to calculate the relative atomic mass of a molecule, which consists of one or several atoms. In this problem, you only need to process molecules which contain hydrogen atoms, oxygen atoms, and carbon atoms. These three types of atom are written as ’H’,’O’ and ’C’ repectively. For your information, the relative atomic mass of one hydrogen atom is 1, and the relative atomic mass of one oxygen atom is 16 and the relative atomic mass of one carbon atom is 12. A molecule is demonstrated as a string, of which each letter is for an atom. For example, a molecule ’HOH’ contains two hydrogen atoms and one oxygen atom, therefore its relative atomic mass is $18 = 2 imes 1 + 16$.

    Input
    The first line of input contains one integer $N(N le 10)$, the number of molecules. In the next $N$ lines, the i-th line contains a string, describing the i-th molecule. The length of each string would not exceed 10.

    Output
    For each molecule, output its relative atomic mass.

    Sample Input
    5
    H
    C
    O
    HOH
    CHHHCHHOH

    Sample Output
    1
    12
    16
    18
    46

    题意:

    氢元素重为 $1$,碳元素重为 $12$,氧元素重为 $16$,对输入的字符串(只包含 $C,H,O$)求和。

    AC代码:

    #include<bits/stdc++.h>
    using namespace std;
    string s;
    int w[200];
    int main()
    {
        ios::sync_with_stdio(0);
        cin.tie(0);
    
        memset(w,0,sizeof(w));
        w['H']=1;
        w['C']=12;
        w['O']=16;
        int T;
        cin>>T;
        while(T--)
        {
            cin>>s;
            int ans=0;
            for(int k=0;k<s.size();k++) ans+=w[s[k]];
            cout<<ans<<endl;
        }
    }

    C - Recursive sequence - [矩阵快速幂加速递推]


    E - Counting Cliques - [暴力搜索]

    A clique is a complete graph, in which there is an edge between every pair of the vertices. Given a graph with N vertices and M edges, your task is to count the number of cliques with a specific size S in the graph.

    Input
    The first line is the number of test cases. For each test case, the first line contains 3 integers N,M and S (N ≤ 100,M ≤ 1000,2 ≤ S ≤ 10), each of the following M lines contains 2 integers u and v (1 ≤ u < v ≤ N), which means there is an edge between vertices u and v. It is guaranteed that the maximum degree of the vertices is no larger than 20.

    Output
    For each test case, output the number of cliques with size S in the graph.

    Sample Input
    3
    4 3 2
    1 2
    2 3
    3 4
    5 9 3
    1 3
    1 4
    1 5
    2 3
    2 4
    2 5
    3 4
    3 5
    4 5
    6 15 4
    1 2
    1 3
    1 4
    1 5
    1 6
    2 3
    2 4
    2 5
    2 6
    3 4
    3 5
    3 6
    4 5
    4 6
    5 6

    Sample Output
    3
    7
    15

    题意:

    给出一个 $n$ 个顶点 $m$ 条无向边的图,让你求图中,节点数为 $S$ 的完全图有多少个。

    题解:

    DFS地去找就可以了,为了保证找出来的子图没有重复,应当认为规定只能往比编号比当前节点大的节点走。

    AC代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=105;
    
    int n,m,s;
    int mp[maxn][maxn];
    vector<int> v;
    
    vector<int> G[maxn];
    
    int ans;
    bool vis[maxn];
    void dfs(int now,vector<int>& v)
    {
        if(v.size()==s)
        {
            ans++;
            return;
        }
    
        for(int i=0;i<G[now].size();i++)
        {
            int nxt=G[now][i];
            if(vis[nxt]) continue;
    
            bool ok=1;
            for(int k=0;k<v.size();k++) {
                if(!mp[v[k]][nxt]) {
                    ok=0;
                    break;
                }
            }
            if(ok)
            {
                v.push_back(nxt), vis[nxt]=1;
                dfs(nxt,v);
                v.pop_back(), vis[nxt]=0;
            }
        }
    }
    
    int main()
    {
        ios::sync_with_stdio(0);
        cin.tie(0);
    
        int T;
        cin>>T;
        while(T--)
        {
            cin>>n>>m>>s;
    
            memset(mp,0,sizeof(mp));
            for(int i=1;i<=n;i++) G[i].clear();
            for(int i=1,u,v;i<=m;i++)
            {
                cin>>u>>v;
                if(u>v) swap(u,v);
                if(!mp[u][v])
                {
                    G[u].push_back(v);
                    mp[u][v]=mp[v][u]=1;
                }
            }
    
            ans=0;
            v.clear();
            memset(vis,0,sizeof(vis));
            for(int i=1;i<=n;i++)
            {
                v.push_back(i), vis[i]=1;
                dfs(i,v);
                v.pop_back(), vis[i]=0;
            }
            cout<<ans<<'
    ';
        }
    }

    G - Do not pour out - [积分+二分] - (Done)


    H - Guessing the Dice Roll - [AC自动机+高斯消元] - (Undone)


    I - The Elder - [树形DP+斜率优化] - (Undone)

  • 相关阅读:
    linux下udp编程
    gitlab和Django实现push自动更新
    gitlab和Django实现push自动更新
    gitlab和Django实现push自动更新
    python通过163邮箱发送邮件
    python通过163邮箱发送邮件
    爬虫的分类
    Webmagic之使用Pipeline保存结果
    Webmagci功能--获取链接
    Webmagic功能--抽取元素
  • 原文地址:https://www.cnblogs.com/dilthey/p/9945818.html
Copyright © 2011-2022 走看看