Codeforces Round #633 (Div. 2) abc

昨天晚上寝室停电了就挺离谱的
所以十二点半就睡了 ab题在机房就出了
回寝室一直在摸鱼 到十二点半c题还没出
刚刚样例过了 但是cf好像炸了交不了 头疼
先写ab题把
c等下再补

A. Filling Diamonds

题目思路

观察图片 可以发现每个图只能有一个竖着覆盖的菱形
所以菱形的位置影响了最后的值
直接输出n就好

ac代码

#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <math.h>
#include <string.h>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <utility>
#define pi 3.1415926535898
#define ll long long
#define lson rt<<1
#define rson rt<<1|1
#define eps 1e-6
#define ms(a,b) memset(a,b,sizeof(a))
#define legal(a,b) a&b
#define print1 printf("111\n")
using namespace std;
const int maxn = 1e3+10;
const int inf = 0x1f1f1f1f;
const ll llinf =0x3f3f3f3f3f3f3f3f;
const int mod = 2333;
 
 
 
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n;
        scanf("%d",&n);
        printf("%d\n",n);
    }
}

B. Sorted Adjacent Differences

题目思路

根据题目要求我们将原序列排序 在一大一小放入数组中输出就好

ac代码

#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <math.h>
#include <string.h>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <utility>
#define pi 3.1415926535898
#define ll long long
#define lson rt<<1
#define rson rt<<1|1
#define eps 1e-6
#define ms(a,b) memset(a,b,sizeof(a))
#define legal(a,b) a&b
#define print1 printf("111\n")
using namespace std;
const int maxn = 1e5+10;
const int inf = 0x1f1f1f1f;
const ll llinf =0x3f3f3f3f3f3f3f3f;
const int mod = 2333;
 
ll a[maxn],b[maxn];
 
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%lld",&a[i]);
        sort(a+1,a+1+n);
        int l=1,r=n,cnt=0;
        while(l<r)
        {
            b[++cnt]=a[r];
            b[++cnt]=a[l];
            l++,r--;
        }
        if(n%2==1)
            b[++cnt]=a[n/2+1];
        for(int i=cnt;i>=1;i--)
            printf("%lld ",b[i]);
        printf("\n");
    }
}

cd等cf好了 再补上

cf终于好了 c题先补上

C. Powered Addition

题目思路

因为题目每次可以对所有位置做加法
并且每次加的值乘2
众所周知二进制可以表示任何数
所以我们只需要找到最大的差值 在计算他需要的时间就好了
我们可以遍历一遍数组
记录当前最大值 与a[i]比较
a[i]<当前最大值 就做差 在计算差值的二进制位数
他的二进制位数就是他需要的天数
遍历一边数组后记录最大天数即可

ac代码

#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <math.h>
#include <string.h>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <utility>
#define pi 3.1415926535898
#define ll long long
#define lson rt<<1
#define rson rt<<1|1
#define eps 1e-6
#define ms(a,b) memset(a,b,sizeof(a))
#define legal(a,b) a&b
#define print1 printf("111\n")
using namespace std;
const int maxn = 1e5+10;
const int inf = 0x1f1f1f1f;
const ll llinf =0x3f3f3f3f3f3f3f3f;
const int mod = 2333;

int a[maxn],b[maxn];

int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        int maxx=a[1],ans=0;
        for(int i=2;i<=n;i++)
        {
            if(a[i]>=maxx)
                maxx=a[i];
            else
            {
                int tem=maxx-a[i];
                int cnt=0;
                while(tem)
                {
                    tem=tem>>1;
                    cnt++;
                }
                ans=max(ans,cnt);
            }
        }
        printf("%d\n",ans);
    }
}

猜你喜欢

转载自blog.csdn.net/daydreamer23333/article/details/107401002