zoukankan      html  css  js  c++  java
  • Codeforces Round #621 (Div. 1 + Div. 2)

    在csdn那里看到好多人用截图的方式,我也试试~

    A:

     

     

         题意:把第一堆以外的其他堆往第一堆运,规定天数以内第一堆最多是多少

        解析:简单模拟即可

    #include<iostream>
    #include<cstdio>
    #include<stack>
    #include<cstring>
    #include<string>
    using namespace std;
    const int maxn=1e2+10;
    int a[maxn];
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            int n,d;
            cin>>n>>d;
            for(int i=1;i<=n;i++)
                cin>>a[i];
            for(int i=2;i<=n;i++)
            {
                int mid=0;
                while(a[i]>0&&d>0)
                {
                    //cout<<d<<endl;
                    mid++;
                    d--;
                    if(mid==i-1)
                    {
                        a[i]--;
                        a[1]++;
                        mid=0;
                    }
                }
            }
            cout<<a[1]<<endl;
        }
    }

         题意:n,x,从(0,0)到达(x,0),n种跳法,问最少需要跳几次到达x点。

         解析:这个题我要重点说一下了,实在是弄得我够呛,花了两个小时来找题解,分析,自己实在是笨的要死。

            给定的n种跳法,我们只需要最大的即可。根据三角形,跳a,如果以此作为三角形,需要a+a>x,两边之和大于第三边,即:2*a>x,这个时候一上一下,只需要两步即可。对于不满足前这一条件的a,我们把它平铺就可以了,如果x%a==0,直接输出x/a,如果x%a!=0,那么就是x/a+1。为什么+1呢?比如样例x=12,   3,4,5。12%5==2,这个2怎么处理呢,我们只需要3个2就可以了,5,5,5, 把第2个5往上抬,和第三个5组成三角形即可到达x。因为12%5一定是小于5的,那么x%a+a一定是<2*a的,即一定可以构成一个三角形!+1即可。

           有个特判,如果n个跳法中出现了a==x,直接输出1即可。

           

    #include<iostream>
    #include<cstdio>
    #include<stack>
    #include<cstring>
    #include<string>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    const int maxn=1e5+10;
    ll a[maxn];
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            ll n,x;
            cin>>n>>x;
            int ok=0;
            for(int i=0;i<n;i++)
            {
                cin>>a[i];
                if(a[i]==x)
                {
                    ok=1;
                }
            }
            if(ok)
            {
                cout<<'1'<<endl;continue;
            }
            sort(a,a+n);
            if(2*a[n-1]>=x)
            {
                cout<<"2"<<endl;continue;
            }
            int yu=x%a[n-1];
            if(yu==0)
            {
                cout<<x/a[n-1]<<endl;
            }
            else
            {
                cout<<x/a[n-1]+1<<endl;
            }
        }
    }

     

        题意:给出一个字符串,找出出现最多的子串(出现的坐标点要呈等差数列,但是对于长度为1和2的没有影响);如样例解释所示。

        解析:观察一下,其实对于这个字符串,只有长度为1的和长度为2的值得考虑。因为如果对于一个长度为3的字符串,出现两次,那么其中的长度为2的字串出现次数一定是>=2的,也就是说长度为2的一定是比它们多的,更何况len>2时还有下标点呈等差的条件限制。统计单个的很简单,而对于长度为2的,需要一个m[26][26],把每个单个的字符当作len=2的第2个字符,那么需要两个for更新每个以它为尾的字符串。出现次数:m[j][c]+=m[j],这里有一个顺序问题,即:

        for(int i=0;i<len;i++)
        {
            int mid=s[i]-'a';    
            for(int j=0;j<26;j++)
                m[j][mid]+=num[j];    
            num[mid]++;  //它放for(j)前面还是后面的问题
        }

          为什么要放后面呢?因为放前面的话,那么就会出现多加的现象,比如输入aa,aa的出现次数变成了3,这很明显不对。我们只是让当前的字符为第二个而已,先加的话它是没有第一个字符的基础的,和谈第二个?输入a,m[a][a]=0,而不是=1。

    #include<iostream>
    #include<map>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    typedef long long ll;
    ll num[26],m[26][26];
    int main()
    {
        string s;
        cin>>s;
        ll len=s.length();
        for(int i=0;i<len;i++)
        {
            int mid=s[i]-'a';    
            for(int j=0;j<26;j++)
                m[j][mid]+=num[j];    
            num[mid]++;
        }
        ll max1=-1,max2=-1;
        for(int i=0;i<26;i++)
            max1=max(max1,num[i]);
        for(int i=0;i<26;i++)
            for(int j=0;j<26;j++)
                max2=max(max2,m[i][j]);
        cout<<max(max1,max2)<<endl;
    }
  • 相关阅读:
    洛谷 P2260 [清华集训2012]模积和 || bzoj2956
    Mass Change Queries Codeforces
    Single-use Stones Codeforces
    洛谷 P4503 [CTSC2014]企鹅QQ
    洛谷 P1463 [HAOI2007]反素数
    Bear and Tower of Cubes Codeforces
    洛谷 P1593 因子和 || Sumdiv POJ
    记一次服务器inodes数报警的事件
    MySQL参数详解
    Django基础流程
  • 原文地址:https://www.cnblogs.com/liyexin/p/12355137.html
Copyright © 2011-2022 走看看