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

Codeforces Round 963 (Div. 2)

时间:2024-08-06 17:17:21浏览次数:6  
标签:963 int sum 中位数 Codeforces leq 序列 Div dp

第一次上蓝名,指不准哪天掉下来就可以第二次蓝名了,好耶

B. Parity and Sum (CF1993B)

首先特判原数组奇偶性相同的情况,奇偶不同时,由于替换过程只能产生奇数,故目标是将所有偶数变成奇数。假设当前选中奇数 \(a_i\) 和偶数 \(a_j\),若 \(a_i<a_j\),第一次操作时 \(a_i:=a_j+a_i\),故最多两次操作能使 \(a_j\) 变成奇数。贪心地选取序列中最大的奇数 \(a_o\),从最小的偶数 \(a_e\) 开始替换,每次使用 \(a_e' = a_o + a_e\) 继续下一步操作,尽可能避免出现两次操作的情况;若不得已需要在某个偶数上操作两次,则使 \(a_o\) 从最大的偶数开始替换,可证明此后不可能出现 \(a_e'<a_i\),总次数即偶数个数+1.

C. Light Switches (CF1993C)

\(a_i\leq 10^9\) 的数据范围显然不方便处理,可以利用周期的性质,将开灯和关灯的时间取模后放在 \(2k\) 大小的差分数组上,最后检查是否存在 \(s[i] = n\) 的时刻即可。注意考虑最后一盏灯的启动时间,若 \(i<t\space mod\space 2k\),需后延一个周期计算。

D. Med-imize (CF1993D)

赛时到最后也没写出来,评价为不掉分都是奇迹。

\(n\leq k\) 时中位数唯一,接下来只讨论 \(n > k\) 的情况。对于一个序列直接求中位数需要排序,不便于寻找最优解,而对于一个确定的数 \(x\),有相对容易的方法验证其是否为中位数:用另一个数组 \(b\) 记录当前数字 \(x\) 与 \(a_i\) 大小关系,\(a_i\geq x\) 时 \(b_i = 1\),否则 \(b_i = -1\);若最终 \(sum=\sum\limits b_i\leq 0\),则 \(x\) 必然不是中位数。考虑二分答案。

对于不同的最终序列,\(x\) 对应的 \(b\) 值不同,只要存在任一 \(sum > 0\) 即 \(x\) 合法,应尽可能获得 \(sum\) 最大的最终序列。设最终序列为 \(a'\),观察 \(a'\) 与 \(a\) 的下标分布规律:由于每次删去恰好 \(k\) 个数,若下标从 \(0\) 开始,\(a'_i = a_j\) 时,\(j\space mod\space k = i\),每个数字只可能出现在固定的位置上。至此转移关系已经确定,dp递推即可求得 \(sum\) 的最大值。

二分check函数:

bool chk(int x) {
    for(int i = 0; i < n; i++) {
        if(a[i] >= x) b[i] = 1;
        else b[i] = -1;
    }
    dp[0] = b[0];
    for(int i = 1; i < n; i++) {
        if(i % k == 0) dp[i] = max(dp[i - k], b[i]);
        else {
            dp[i] = dp[i - 1] + b[i];
            if(i > k) dp[i] = max(dp[i], dp[i - k]);
        }
    }
    return dp[n - 1] > 0;
}

有一说一我dp是真菜啊,该加训了)

标签:963,int,sum,中位数,Codeforces,leq,序列,Div,dp
From: https://www.cnblogs.com/meowqwq/p/18344052

相关文章

  • CodeForces - 765F
    不妨套用P9058的套路,记点对\((i,j),a_i\gea_j\)被支配当且仅当存在\(i<k<j\),满足\(a_i\gea_k\gea_j\),同样,猜测对于\(i\),不被支配的点对\((k,i)\)只满足\(k<i\)最大且\(a_k>a_i\)。证明不妨使用反证法,记\(pre\),满足\(pre<j<i\)且\(a_{pre},a_j>a_i\),假设\((p......
  • Codeforces Round 963 (Div. 2)
    A.QuestionMarks题目大意有4n道题,每道题有4个选项,且正确答案中每个选项各占有n个。给定一个字符串s,s中ABCD分别代表4个选项,?代表放弃这道题,求可能的最大正确数解题思路统计每个选项的出现次数,假设每次选的都对,即ans+=min(x,n)点击查看代码#include<bits/stdc++.h>usi......
  • Codeforces Round 963 (Div. 2)
    CodeforcesRound963(Div.2)A对A,B,C,D的数量和\(n\)取个\(\min\)相加B只有奇数或只有偶数答案为\(0\),否则,只能把所有的偶数改为奇数,因为不可能把所有奇数改为偶数。然后就是改的大小问题了。考虑找到最大的奇数,然后把偶数从小到大依次修改。C显然对\(2k\)......
  • Educational Codeforces Round 168 (Rated for Div. 2)
    没有时间参赛直接补几道简单题吧~B.MakeThreeRegions题意:给一个2行的字符串,有block和其他东西,问把一个位置变成block让联通的部分变成3个部分,有多少种方法思路:找规律,找所哟符合条件的块即可voidsolve(){ intn; cin>>n; array<string,2>s; cin>>s[0]>>s[1];......
  • CodeForces-765F
    首先,如果你写过P9058的话,应该会想到支配点对这个trick,我们不妨将此题的套路搬到这套题上.定义点对\((i,j),a_i\lea_j\),当\((i,j)\)被支配当且仅当存在\(i<k<j\)满足\(a_i\lea_k\lea_j\)。相应的,一个有效的点对\((i,j)\),其中\(i\)满足\(i\)最大且\(a_i<a_j\)。......
  • Codeforces Round 963 (Div. 2) A - C 详细题解(思路加代码,C++,Python) -- 来自灰名
    比赛链接:Dashboard-CodeforcesRound963(Div.2)-Codeforces之后有实力了再试试后面的题目,现在要做那些题,起码要理解一个多小时题目A:链接:Problem-A-Codeforces题目大意理解:        极少数不考翻译能读懂的cf题目(bushi)每个测试用例第一行一个n,......
  • Codeforces Round 963 (Div. 2) D题解
    CodeforcesRound963D题目描述给定两个正整数n和k以及另一个由n个整数组成的数组a。在一次操作中,可以选择a中大小为k的任意一个子数组,然后将其从数组中删除,而不改变其他元素的顺序。更正式地说,假设(l,r)是对子数组a[l],a[l+1],...,a[r]的操作,使得r-l+1......
  • div中添加el-loading(局部loading的使用)
    div中添加el-loading(局部loading的使用)效果:在div中实现el-loadinghttps://img-blog.csdnimg.cn/c2870e74bd344b06ad1ccb0844b8e8ce.png<divclass="content-main">{{hotList}}</div>getHotList(columnType){this.$nextTic......
  • Codeforces Round 963 (Div. 2) 补题记录(A~D,F1)
    不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.A直接计算每一个选项最多对多少个题加起......
  • Codeforces Round 891 (div.3) D题解析
    CodeForcesRound898(div4)D题.StrongVertices大致思路对于题目的给的式子,au-av>=bu-bv,我们可以通过移项得到au-bu>=av-bv,这样就能够构造出来一个ai-bi的项出来对于构造出来的项,我们可以遍历一遍用数组把每一个项存起来,找到值最大的项,值最大的项所对应的下标就是强顶......