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

    地址: https://codeforces.com/contest/1339

         解析:最近a题题意都好长啊.....这道题直接看有几个竖着的菱形就可以了,输入n,输出n。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<set>
    using namespace std;
    typedef long long ll;
    const int maxn=3e5+100;
    ll v[maxn];
    ll a[maxn],b[maxn];
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            ll n;
            cin>>n;
            cout<<n<<endl;
        }
    }

         题意:将给出的数列进行重新排列,使两两之间的差逐渐增大。

         解析:排个序,从中间向两边扩散取就可以了,每次取这个数和它在右边对应的数。注意n是奇数的时候,先把a[mid]打印出来。

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

         题意:那个aij我是没看懂什么意思。不过不影响理解题意,就是说第x秒可以对任意几个位置+2^(x-1)。要求把整个数列变成非递减数列,最快需要几秒。

         解析:取最大递减差值maxx,看从0到maxx需要多少秒即可。注意求这个maxx,不能O(n*n)地找,我就在这里T了一次。只要一个for里每次更新最大值mx和最大差值即可。因为对于当前a[i],最大值要么在它头上,要么在它前面,在它头上,就说明当前位置之前没有出现递减现象。在它前面,就说明出现了递减,更新这个差值,每次max取最大差值即可。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<set>
    using namespace std;
    typedef long long ll;
    const int maxn=1e5+100;
    const int minnx=2e9;
    ll a[maxn];
    ll v[maxn];
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            int n;
            scanf("%d",&n);
            for(int i=0;i<n;i++)
                scanf("%lld",&a[i]);
            int ok=0;
            for(int i=1;i<n;i++)
            {
                if(a[i-1]>a[i])
                {
                    ok=1;break;
                }
            }
            if(!ok)
            {
                cout<<"0"<<endl;continue;
            }
            ll mx=a[0],maxx=0;
            for(int i=0;i<n;i++)
            {maxx=max(maxx,mx-a[i]);
                mx=max(mx,a[i]);
                
            }
            ll cnt=0,k=1;
            ll sum=0;
            while(1)
            {
                sum+=k;
                cnt++;
                k=k*2;
                if(sum>=maxx)
                    break;
            }
            cout<<cnt<<endl;
        }
    }
  • 相关阅读:
    MySql事务试什么?具有哪些特性
    MySQL的前缀索引你是如何使用的
    你知道联合索引吗?它的最左原则是什么?
    你来说一下 Mysql 索引有几种类型呢?分别是什么?
    什么是Mysql的回表查询?聊一聊
    JavaScript中使用typeof运算符需要注意的几个坑
    prototype和__proto__
    JavaScript中的普通函数与构造函数比较
    原型和原型链
    document.querySelector和querySelectorAll方法
  • 原文地址:https://www.cnblogs.com/liyexin/p/12692774.html
Copyright © 2011-2022 走看看