首页 > 其他分享 >Codeforces Round 983 (Div. 2)

Codeforces Round 983 (Div. 2)

时间:2024-11-02 12:42:48浏览次数:1  
标签:typedef const int 983 ll Codeforces long ++ Div

A

最坏的情况就是所有开着的开关尽可能配对

最好的情况就是所有开着的开关尽可能不配对

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int>PII;
const int N=1e6+10;
const int mod=998244353;
const int INF  = 0x3f3f3f3f;
const ll INFll  = 0x3f3f3f3f3f3f3f3f;
#define endl "\n" 

//vector<vector<int>>adj(N);


void solve()
{
    int n; cin >> n;
    int sum = 0;
    for(int i = 1; i <= 2 * n; i ++) {
        int x; cin >> x;
        sum += x;
    }
    cout << sum%2 << " ";
    if(sum > n) sum -= 2 * (sum - n);
    cout << sum << endl;
}


signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    cout << setprecision(11) << fixed;
    int t;t=1;
    cin>>t;
    for(int i=1;i<=t;i++){
        //printf("Case %d: ",i);
        solve();
    }
}

B

分析

首先要保证 \(k\) 这个数作为 \(k\) 所在区间的中位数,那么就直接让这个区间以 \(k\) 为中心,

当 \(k\) 在第一轮被选出来后,要使得第二轮的中位数也为 \(k\) ,那么左边区间数量应该等于右边区间数量
直接使这个左右区间数量为1

现在就只有三个区间,"左","中", "右".

只剩一个要求了,所有区间的长度为奇数,第一轮构造可以保证 |中| 是奇数.

又因为题目保证 \(n\) 为奇数,我们枚举 |中|, 直接计算左右两个区间的长度,找到三个区间长度都为奇数的情况.

实际上 奇 = 偶 + 奇 + 偶 或者 奇 = 奇 + 奇 + 奇,

这两种情况会交替出现,加上边界判断,可以让这个枚举的复杂度降到 \(o(1)\)

n = 1 时不可能有3个区间,要特判

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int>PII;
const int N=1e6+10;
const int mod=998244353;
const int INF  = 0x3f3f3f3f;
const ll INFll  = 0x3f3f3f3f3f3f3f3f;
#define endl "\n" 

//vector<vector<int>>adj(N);


void solve()
{
    int n, k;
    cin >> n >> k;
    int len = 0;
    if(n == 1) {
        cout << 1 << endl;
        cout << 1 << endl;
        return;
    }
    while(1) {
        if(k - len < 1 || k + len > n) break;
        int l = k - 1 - len ;
        int r = n - k - len;
        // cout << l << " " << r << endl;
        if(l%2 && r%2) {
            cout << 3 << endl;
            cout << 1 << " " << l + 1 << " " << n - r + 1 << endl;
            return;
        }
        len ++;
    }

    cout << "-1" << endl;

}


signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    cout << setprecision(11) << fixed;
    int t;t=1;
    cin>>t;
    for(int i=1;i<=t;i++){
        //printf("Case %d: ",i);
        solve();
    }
}

C

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int>PII;
const int N=1e6+10;
const int mod=998244353;
const int INF  = 0x3f3f3f3f;
const ll INFll  = 0x3f3f3f3f3f3f3f3f;
#define endl "\n" 

//vector<vector<int>>adj(N);


void solve()
{
    int n; cin >> n;
    vector<int> a(n);
    for(int i = 0; i < n; i ++) cin >> a[i];
    sort(a.begin(), a.end());
    int ans = 0;
    int r = 0;
    for(int l = 0; l < n - 1; l ++) {
        while(r < n && a[l] + a[l + 1] > a[r]) r ++;
        // cout << a[l] + a[l + 1] << " " << a[r] << endl;
        ans = max(r - l, ans);
        // cerr << l + 1 << " " << r + 1 << endl;
    }
    cout << n - ans << endl;
}

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    cout << setprecision(11) << fixed;
    int t;t=1;
    cin>>t;
    for(int i=1;i<=t;i++){
        //printf("Case %d: ",i);
        solve();
    }
}

D

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int>PII;
const int N=1e6+10;
const int mod=998244353;
const int INF  = 0x3f3f3f3f;
const ll INFll  = 0x3f3f3f3f3f3f3f3f;

//vector<vector<int>>adj(N);

int ask(int a, int b) {
    int ans;
    cout << "? " << a << " " << b << endl;
    cin >> ans;
    return ans;
}



void solve()
{
    int n;
    cin >> n;
    vector<int>p(n, 0);
    vector<int>fa,fa2;
    p[1] = 0;
    int i;
    for(i = 2; i < n; i ++) {
        if(ask(1, i) == 0) {
            p[i] = 1;
            fa.push_back(i);
            i ++;
            break;
        } 
        p[i] = 0;
        fa.push_back(i);
    }
    int j = 0;
    for(; i < n ; i ++) {
        while(j < (int)fa.size() && ask(fa[j], i) == 1) {
            j ++;
        }
        if(j >= (int)fa.size()) {
            swap(fa, fa2);
            fa2.clear();
            i --;
            j = 0;
        } else {
            p[i] = fa[j]; 
            fa2.push_back(i);
            j ++;
        }
    }

    cout << "! ";
    for(int i = 1; i < n; i ++) cout << p[i] << " "; cout << endl; 
}


signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    cout << setprecision(11) << fixed;
    int t;t=1;
    cin>>t;
    for(int i=1;i<=t;i++){
        //printf("Case %d: ",i);
        solve();
    }
}

标签:typedef,const,int,983,ll,Codeforces,long,++,Div
From: https://www.cnblogs.com/Haborym/p/18521519

相关文章

  • Codeforces Round 983 div2 个人题解(A~D)
    CodeforcesRound983div2个人题解(A~D)Dashboard-CodeforcesRound983(Div.2)-Codeforces火车头#define_CRT_SECURE_NO_WARNINGS1#include<algorithm>#include<array>#include<bitset>#include<cassert>#include<cmath>#in......
  • CodeForces Dora and C++ (2007C) 题解
    CodeForcesDoraandC++(2007C)题解题意给一个数组\(c_{1...n}\),定义数组的\(range\)是最大值减最小值,即极差。给出两个值\(a\)和\(b\),每步操作中,可给数组中任一一个数增大\(a\)或增大\(b\)。问任意步操作后(可以是\(0\)步),极差的最小值。思路(要直接看答案可以跳......
  • Codeforces Round 982 (Div. 2)解题报告
    CodeforcesRound982(Div.2)解题报告A显然答案不会小于\(2(\maxw+\maxh)\)。构造方案学习样例一,挺明显的。B有个小性质(好像没用):一旦能通过操作变成non-increasing,再对整个序列操作一次必然变为同一个数字。我们把一开始remove的数字记为A类,通过操作删掉的记为B类......
  • Educational Codeforces Round 20 E. Roma and Poker
    差分约束我们记W表示\(1\),L表示\(-1\),D表示\(0\),然后记前\(i\)位的前缀和是\(dis[i]\)。则我们可以根据题面得到如下约束。当前位是W,则有\[\left\{\begin{matrix}dis[i]-dis[i-1]\le1\\dis[i-1]-dis[i]\le-1\end{matrix}\right.\]当前位是L,则有\[\left\{\begin{m......
  • Codeforces Round 977 (Div. 2, based on COMPFEST 16 - Final Round)
    Preface这场其实是上周四VP的,因为当时马上要出发打济南站了,但因为挺久没写代码了所以打算临阵磨枪一下好家伙结果Div.2D不会做直接给人整麻了,不过好在看了眼榜把E2写了,后面发现这个D想到了就不难A.MeaningMean容易发现从小到大操作一定最优#include<cstdio>#inc......
  • dreamweaver家乡主题网页设计 DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下
    家乡旅游景点网页作业制作网页代码运用了DIV盒子的使用方法,如盒子的嵌套、浮动、margin、border、background等属性的使用,外部大盒子设定居中,内部左中右布局,下方横向浮动排列,大学学习的前端知识点和布局方式都有运用,CSS的代码量也很足、很细致,使用hover来完成过渡效果、鼠......
  • Educational Codeforces Round 171 (Rated for Div. 2)B-D
    B.BlackCells题目:思路:首先我们发现要分奇偶讨论。偶数:很简单,取a[2]-a[1],a[4]-a[3],.........a[n]-[n-1]的最大值。奇数:我只需要知道假如删除当前的这个数剩下的数最大的间隔值,注意只能删除1,3,等奇数位,因为要保证删除后左右的数为偶数。(我的代码里面是偶数位因......
  • Codeforces Round 978(div.2) D1
    #感觉挺有意思的一道题题目:思路:观察发现对于两个人a,b如果两个人里面没有Impostor那么,你得到的回答是一样的,如果有impostor那么结果不同,那么我们就可以两个两个的询问,先找到2个人里面有impostor然后在找另外一个人来询问就行了。代码:#include<bits/stdc++.h>usin......
  • Codeforces Global Round 27,D. Yet Another Real Number Problem 题解
    单调栈+贪心题意:给定一个序列从左往右对于每个索引iii,求出其前缀的数组可以进行任意次以下操作的条件下:选择......
  • Codeforces Round 981 (Div. 3) ABCDE
    CodeforcesRound981(Div.3)ABCDEA.SakurakoandKosuke藕是看样例直接猜了结论......