首页 > 其他分享 >Codeforces Round 971 (Div. 4) E 题解析

Codeforces Round 971 (Div. 4) E 题解析

时间:2024-09-04 16:36:14浏览次数:12  
标签:971 auto sum Codeforces long 答案 Div

                                 # E题 Klee's SUPER DUPER LARGE Array!!!

题目描述

image
image

思路:

对于这道题,首先观察到题目求的是最小可能值,而且数据的范围是1e9范围,所以首先可以考虑的方法就是O(logn)的方法,而适合求最值的方法无疑就是二分搜索,可以通过二分来不断缩小答案的区间来求出最终的答案。

点击查看代码
#include <iostream>  
#include <cmath>  
using namespace std;
int n, k;
auto sum(long long a, long long b) {
    return ((b - a + 1) * (a + b)) >> 1;
}
void solve()
{
    int l = 0, r =n-1;
    while (l+1<r)
    {
           int m = (l+r)>>1;
            auto s1 = sum(k, k+m);
            auto s2 = sum(k+m+1, k+n-1);
            if (s2 - s1 > 0) {
                l = m;
            } else {
                r = m;
            }
    }
    cout << min(abs(sum(k, k + l) - sum(k + l + 1, k + n - 1)), abs(sum(k, k + r) - sum(k + r + 1, k + n - 1))) << endl;
}
int main() {
    int t;
    cin >> t;
    while (t--) {
        cin >> n >> k;
        solve();
    }
    return 0;
}

提示

在不断缩小答案范围的过程中,如果后面的项和大于前面的项之和,我们的目的是让两个的值尽可能接近,所以要把后面的项和减小,同时前面的项和增大,就是把mid=l,而前面项大于后面项者同理,最后比较l和r的答案的大小即输出

标签:971,auto,sum,Codeforces,long,答案,Div
From: https://www.cnblogs.com/era768/p/18396800

相关文章

  • Codeforces Round 969 (Div. 1 + 2)
    A将序列转化为\(01\)串,奇数为\(1\),偶数为\(0\)。容易发现两个\(0\)不能分在同一组,于是答案的上限取决于奇数的个数,并且容易构造方案达到这个上界,随便做做就行。B将序列排序后,发现不管怎么加,大小顺序不变,记录下最大值按题意模拟。C根据基本数论知识可得,操作等价于加上......
  • Codeforces Round 971 (Div. 4)
    A-Minimize!inlinevoidsolve(){ inta,b; cin>>a>>b; cout<<b-a<<'\n';}B-osu!maniainlinevoidsolve(){ intn; cin>>n; vector<string>a(n); for(auto&x:a){ cin>>x......
  • Codeforces Round 971 (Div. 4) A-G1
    Ab-a#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;mt19937rnd(time(0));#defineintlonglongtypedeftuple<int,int,int>tp;#definexfirst#defineysecondtypedefpair<int,int>pii;typedefpair<double,double......
  • Educational Codeforces Round 169(A-D)
    A.ClosestPoint        给你一组点。你必须在这个集合中加入一个整数的点,使它与集合中现有的每一个点不同,并且它成为与集合中每一个点**最近的点。这可能吗?(输入yesorno)    一道思路题,简单思考可以发现,如果数字超过两个,那么这题答案就是NO。当两个数字的......
  • Codeforces Round 966 (Div. 3)
    ab略...C:map嵌套水过去的,复杂度\(nlog^2n\),感觉不如正解#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#definepiipair<int,int>#definemkpmake_pair#definefirfirst#definesecsecond#definepbpush_backconstintmaxn=2e5+100;......
  • Codeforces Round 970 (Div. 3)(VP)
    A.Sakurako'sExam总结:一看n<=20,直接暴力+剪枝即可inlinevoidsolve(){ inta,b; cin>>a>>b; vector<int>d; d.reserve(a+b); while(a--){ d.push_back(1); } while(b--){ d.push_back(2); } autodfs=[&](auto&......
  • Codeforces Round 968 (Div. 2)
    vp的,老规矩跳过abC:根据题意我们知道三个不一样的字母连续放一定可以,然后观察样例发现好像把两个不同的字母轮流放也可以。进一步猜测(瞎猜的)发现这个好像只要把不同的挨个放进去就行了(本来以为可能要按数量排序但是似乎根本不用),最后剩下的全放一起也没事。然后就过了。#includ......
  • Codeforces Round 970 div3
    CodeforcesRound970div3错过的一场比赛,第二天早晨VP,题目的通过率还挺奇怪A.Sakurako'sExamhttps://codeforces.com/contest/2008/problem/A题意:有a个1和b个2的数组,在1和2前面增添加减号,判断是否能让结果为0思路:1个2需要2个1进行填补,不如先让2自己进行消去,如......
  • Codeforces Round 969 Div.2+Div.1
    A.Dora'sSet注意到任意两个偶数的\(\gcd\)都大于\(1\),因此选择的三个数中至多一个偶数,而注意到相邻的奇数一定互质,因此每次选两个奇数一个偶数,答案=奇数的个数÷2点击查看代码#include<bits/stdc++.h>usingnamespacestd;#definelllonglong#defineullunsigned......
  • codeforces做题记录(1924B)& 回顾线段树
    1924B.SpaceHarbour题意:n个点排成一行,其中某些点上面建有港湾,港湾有一个权值,对每个点我们定义点的权值为“左边(包括自己)第一个港湾上的权值\(\times\)到右边(包括自己)第一个港湾的距离”(保证在一开始1号和n号点上都有港湾)。有q次操作:操作1给定x和v,表示在x点上建立权值为v的......