CF2112C Coloring Game
CF2112C Coloring Game
题意
Alice 和 Bob 正在玩一个游戏,使用一个大小为 \(n\) ( \(1 \leq n \leq 5000\) ) 的整数数组 \(a\)。
\(a\) 数组中的元素已从小到大排序。
初始时,数组中的所有元素都是无色的。
首先,Alice 选择 \(3\) 个元素并将它们染成红色。
然后 Bob 选择任意一个元素并将其染成蓝色(如果它已经是红色,则覆盖)。
如果红色元素的和严格大于蓝色元素的值,Alice 获胜。
你的任务是计算 Alice 选择 \(3\) 个元素的方式数,使得无论 Bob 如何操作,Alice 都能获胜。
题解
假设 Alice 已经选了三个元素 \((a_i,a_j,a_k)\),满足 \(i<j<k\)。
假设 Bob 选了 \(a_x\),显然 \(a_x\) 只会是 \(a_n\) 或者 \(a_k\) ,所以有:
\left\{
\begin{array}{}
a_i+a_j+a_k>a_n\\
a_i+a_j>a_k
\end{array}
\right.
\]
转换一下,有 \(a_n-a_i-a_j+1\leq a_k\leq a_i+a_j\),由于 \(n\) 最大只有 \(5000\),可以 \(O(n^2)\) 的枚举 \(a_i\) 和 \(a_j\) ,再用树状数组维护出 \(a_k\),做到 \(O(n^2 \log V)\)。
具体的,由于需要满足 \(i<j<k\),所以我们要倒序枚举 \(a_j\) ,同时维护 \(a_k\),再枚举 \(a_i\) 计算答案,详见代码。
注意每个测试点结束后要清空树状数组,而且不能暴力清空,得写一个 \(\text{del}\) 函数,详见代码。
代码
#include<bits/stdc++.h>
using namespace std;
const int N=5005;
const int M=1e5+5;
int n;
int a[N];
//树状数组
int t[M];
void upd(int x){ for(;x<M;x+=x&(-x)) t[x]++; }
void del(int x){ for(;x<M;x+=x&(-x)) t[x]--; }
int ask(int x){
if(x<=0) return 0;
int res=0;
for(;x;x-=x&(-x)) res+=t[x];
return res;
}
void solve(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
int an=a[n];
long long ans=0;
for(int j=n-1;j>=2;j--){//枚举 a_j
upd(a[j+1]);//维护 a_k
for(int i=j-1;i>=1;i--)//枚举 a_i
ans+=(long long)max(0,ask(min(an,a[i]+a[j]-1))-ask(an-a[i]-a[j]));
}
cout<<ans<<"\n";
for(int i=3;i<=n;i++) del(a[i]);//清空树状数组
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T; cin>>T;
while(T--) solve();
return 0;
}
CF2112C Coloring Game的更多相关文章
- Codeforces Round #369 (Div. 2)---C - Coloring Trees (很妙的DP题)
题目链接 http://codeforces.com/contest/711/problem/C Description ZS the Coder and Chris the Baboon has a ...
- CF149D. Coloring Brackets[区间DP !]
题意:给括号匹配涂色,红色蓝色或不涂,要求见原题,求方案数 区间DP 用栈先处理匹配 f[i][j][0/1/2][0/1/2]表示i到ji涂色和j涂色的方案数 l和r匹配的话,转移到(l+1,r-1 ...
- Codeforces Round #369 (Div. 2) C. Coloring Trees DP
C. Coloring Trees ZS the Coder and Chris the Baboon has arrived at Udayland! They walked in the pa ...
- CodeForces #369 C. Coloring Trees DP
题目链接:C. Coloring Trees 题意:给出n棵树的颜色,有些树被染了,有些没有.现在让你把没被染色的树染色.使得beauty = k.问,最少使用的颜料是多少. K:连续的颜色为一组 ...
- CodeForces 149D Coloring Brackets
Coloring Brackets time limit per test: 2 seconds memory limit per test: 256 megabytes input: standar ...
- C. Coloring Trees DP
传送门:http://codeforces.com/problemset/problem/711/C 题目: C. Coloring Trees time limit per test 2 secon ...
- codeforces 711C C. Coloring Trees(dp)
题目链接: C. Coloring Trees time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- POJ 1419 Graph Coloring(最大独立集/补图的最大团)
Graph Coloring Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4893 Accepted: 2271 ...
- URAL 1080 Map Coloring(染色)
Map Coloring Time limit: 1.0 secondMemory limit: 64 MB We consider a geographical map with N countri ...
- POJ1419 Graph Coloring(最大独立集)(最大团)
Graph Coloring Time Limit: 1000MS Memor ...
随机推荐
- CF757G Can Bash Save the Day? (复健 Day 1)
先差分为 \(Q(r)-Q(l-1)\),\(Q(i)=\sum_{j=1}^{i} \operatorname{dis}(p_j, x)\). 树上在线路径优先考虑点分树,先想询问怎么做,我们记 \ ...
- C# DataGridViewRow转换为(Model)实体对象
https://blog.csdn.net/cxu123321/article/details/107875832 ContactModel model = dataGridView1.Current ...
- VBA使用Outlook自动发送邮件
↓↓↓欢迎关注我的公众号,在这里有数据相关技术经验的优质原创文章↓↓↓ 基础版本–能自动发送就是成功 利用VBA使用Outlook自动发送邮件,代码及注释如下: Sub send_mail() Dim ...
- 修改Git全部Commit提交记录的用户名Name和邮箱Email
当我们换邮箱了,想把已经提交过的 commit 的邮箱和用户名改成新的时候. 先把本地配置成新的 git config user.name '丁少华' git config user.email '新 ...
- git回退到指定commit并同步到线上
查看commit id git log 本地回退到指定commitid git reset --hard 6acd0f4cfc78302c5563facc1ebc7c84384aef3e 推送到远程 ...
- SpringBoot--如何整体读取多个配置属性及其相关操作
上篇文章讲到使用@Value注解每次只能读取一个配置属性,若要整体读取多个属性,或者读取具有某种结构关系的一组属性可使用@ConfigurationProperties注解来处理. @Configur ...
- 将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005,其他数据保持不变,使用replace实现,直接使用update会报错。
简介 修改数据 update titles_test set emp_no = replace(emp_no, 10001, 10005) where id = 5; update titles_te ...
- SciTech-Physics-Relativity:相对论: 正解"相对论" + "光速不变原理"+VS 声波、水波 的传播速度
SciTech-Physics-Relativity:相对论: Relativity:相对论 Relativity:相对论 分 "广义相对论"和"狭义相对论". ...
- Trae开发uni-app+Vue3+TS项目飘红踩坑
前情 Trae IDE上线后我是第一时间去使用体验的,但是因为一直排队问题不得转战cursor,等到Trae出付费模式的时候,我已经办了Cursor的会员,本来是想等会员过期了再转战Trae的,但是最 ...
- Win11专业版电脑打印机如何共享的问题
有电脑基地的用户,在办公的时候总会需要使用到打印机的功能,把打印机连接到电脑中就可以享受打印服务,您可以随时随地使用打印机打印东西,如果想让win11系统同一台打印机同时被两台电脑连接该怎么设置呢?这 ...