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

    A:http://codeforces.com/contest/1467/problem/A

    题意:

    n个灯,每个灯一开始都是0,每一秒钟每个灯显示的数字会往上一位。数字从0~9,9完是0,依此类推。

    你可以指定唯一一个灯被停止,那么它周边的灯,都会依次比它晚一秒停止。

    求最大可得的数字。

    解析:

    推一下,1位时候,第9秒暂停,答案为9

    2位的时候,第二位第8秒暂停,那么第一位就比它晚一秒,为98

    3位的时候,为989

    大于4位的时候,很明显,前三位989为最大,那么从第4位往后,依次慢一秒即可。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<map>
    using namespace std;
    const int maxn  = 1e5+10;
    typedef long long ll;
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            int n ;
            cin>>n;
            if(n==1)
                cout<<"9"<<endl;
            else if(n==2)
                cout<<"98"<<endl;
            else if(n==3)
                cout<<"989"<<endl;
            else
            {
            //    cout<<"?";
                cout<<"989";
                int ans=0;
                for(int i=4;i<=n;i++)
                {
                    cout<<ans;
                    ans++;
                    if(ans==10)
                        ans=0;
                }    
                cout<<endl;
            }
        }
        return 0;
        
    }

    B:http://codeforces.com/contest/1467/problem/B

    题意:

    危险值为所以谷点和尖点的数目之和。

    唯一的一次操作是,将一个数字变为任意一个数字。

    求操作后的最小危险值。

    解析:

    刚开始,以为一个危险点的修改,可以将它本身以及周围都变成安全点。其实不然。

    首先,一个危险点ai,要想把它变成安全点,要么变为ai-1,要么变为ai+1

    此时,ai变为安全点,但是ai-1或ai+1,可能因此变为危险点。

    所以考虑每一个 点的时候,要将ai分别变成ai-1和ai+1,来综合求最小值。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<map>
    using namespace std;
    const int maxn  = 3e5+50;
    const int inf=99999999;
    typedef long long ll;
    ll a[maxn],vis[maxn];
    int n ;
    int check(int i)
    {
        if(i==1||i==n)
            return 0 ; 
        if((a[i]>a[i-1]&&a[i]>a[i+1])||(a[i]<a[i-1]&&a[i]<a[i+1]))
            return 1;
            return 0 ;
    }
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            cin>>n;
            for(int i=1;i<=n;i++)
                cin>>a[i];
            int cnt = 0 ;
            for(int i=2;i<n;i++)
            {
                if((a[i]>a[i-1]&&a[i]>a[i+1])||(a[i]<a[i-1]&&a[i]<a[i+1]))
                    cnt++;
            }        
            int minn = inf ; 
        //    cout<<cnt<<"--"<<endl;
            for(int i=2;i<n;i++)
            {
                int mdl = a[i-1],md=a[i],mdr=a[i+1];
                int sum = cnt;            
                int c=check(i-1)+check(i)+check(i+1);
                a[i]=mdl;
                int c2=check(i-1)+check(i)+check(i+1);
                sum=sum-(c-c2);
                minn=min(minn,sum);
                
                
                sum=cnt;
                a[i]=mdr;
                c2=check(i-1)+check(i)+check(i+1);
                sum=sum-(c-c2);
                minn=min(minn,sum);
                a[i]=md;
                
            }
            cout<<min(minn,cnt)<<endl;
        }
        return 0;    
    }
    //9
    //1 4 1 1 4 1 4 1 4
  • 相关阅读:
    LintCode "Maximum Gap"
    LintCode "Wood Cut"
    LintCode "Expression Evaluation"
    LintCode "Find Peak Element II"
    LintCode "Remove Node in Binary Search Tree"
    LintCode "Delete Digits"
    LintCode "Binary Representation"
    LeetCode "Game of Life"
    LintCode "Coins in a Line"
    LintCode "Word Break"
  • 原文地址:https://www.cnblogs.com/liyexin/p/14256959.html
Copyright © 2011-2022 走看看