码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #633 (Div. 2)(A, B, C)

时间:2020-04-13 21:11:52      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:通过   观察   can   return   c++   freopen   cpp   ref   include   

A. Filling Diamonds

A. Filling Diamonds 题目链接

通过对图像的观察,我们不难发现,答案就是正立的菱形的个数

技术图片

为什么是这样,我们无论如何放置都有一个图形是要用,正立的菱形去填涂的,我们假定可以有两个正立的菱形存在,可以发现,无论这两个菱形的距离是如何,都不可能填满这两个菱形之前的区域,因此只可能存在一个正立的菱形,所以正立的菱形的位置就决定了方案的数量。

//Powered by CK
#include<bits/stdc++.h>
using namespace std;
int main() {
    //freopen("in.txt", "r", stdin);
    int t, n;
    cin >> t;
    while(t--) {
        cin >> n;
        cout << n << endl;
    }
    return 0;
}

B. Sorted Adjacent Differences

B. Sorted Adjacent Differences 题目链接

简单的贪心,排一个序,从中间开始同时向两边,或者从两边开始向中间开始输出。

//Powered by CK
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 + 10;
int a[N], n;
int main() {
    // freopen("in.txt", "r", stdin);
    int t;
    scanf("%d", &t);
    while(t--) {
        scanf("%d", &n);
        for(int i = 0; i < n; i++)
            scanf("%d", &a[i]);
        sort(a, a + n);
        int l = n / 2 - 1, r = n / 2;
        if(n & 1)   printf("%d ", a[r++]);//奇数情况特殊处理一下,方便后面的枚举遍历。
        while(r < n)
            printf("%d %d ",a[l--], a[r++]);
        printf("\n");
    }
    return 0;
}

C. Powered Addition

C. Powered Addition 题目链接

要求是形成一个非递减的序列,遍历一遍记录一个当前的最大值 most 就好了,通过对小于most的数,更新最大差值。

//Powered by CK
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 + 10;
int a[N], n;
int main() {
    // freopen("in.txt", "r", stdin);
    int t;
    scanf("%d", &t);
    while(t--) {
        scanf("%d", &n);
        for(int i = 0; i < n; i++)
            scanf("%d", &a[i]);
        int most = a[0], ans = 0;
        for(int i = 1; i < n; i++) {
            if(a[i] >= most) most = a[i];
            else {
                ans = max(most - a[i], ans);
                a[i] = most;
            }
        }
        int pos = 0, po = 1;
        while(ans > 0) {
            ans -= po;
            po *= 2;
            pos++;
        }
        printf("%d\n", pos);
    }
    return 0;
}

D题写的时候就感觉是树形dp,dp还没有系统的学过(基本没子写过dp的题目),不会写,先暂时放下吧。
昨天忘记比赛时间了,比赛开赛后半小时才去写,排名2500+去了。

Codeforces Round #633 (Div. 2)(A, B, C)

标签:通过   观察   can   return   c++   freopen   cpp   ref   include   

原文地址:https://www.cnblogs.com/lifehappy/p/12693894.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!