E. Singers’ Tour
F. Reverse
G. Trader Problem

推推式子就行了。

int a[N];
int main()
{int t;scanf("%d", &t);while(t --){int n;LL sum = 0;scanf("%d", &n);for(int i = 1;i <= n;i ++) scanf("%d", a+i), sum += a[i];a[0] = a[n];if(sum%(n*(n+1)/2)){puts("NO");continue;}sum /= n*(n+1)/2;for(int i = n;i >=1;i --){if((sum-a[i]+a[i-1])%n || sum-a[i]+a[i-1]<=0){puts("NO");a[1] = 0;break;}a[i] = (sum-a[i]+a[i-1])/n;} if(a[1]){puts("YES");for(int i = 1;i <= n;i ++)cout<<a[i]<<' ';cout<<endl;}}return 0;
}

爆搜, 写的很烦。

LL x, y;
string a, b;
map<string, bool>ma;
bool flag  = 0;
string fan(string c) // 取反
{string a = c;while(a.back() == '0') a.pop_back();reverse(a.begin(), a.end());return a;
}void inverse(LL x, string &a)  // 转换成二进制字符串
{while(x)a += (char)('0'+(x&1)), x>>=1;reverse(a.begin(), a.end());return ;
}void dfs(string a)
{if((a.size() > b.size() && a.back() == '1') || ma[a]) return ; if(a.size() == b.size())  flag |= a == b|fan(a) == b;ma[a] = 1;    if(a.back() == '0')dfs(fan(a+'1')), dfs(fan(a));else {ma[fan(a)] = 1;dfs('1'+a); dfs(a+'1');}return ;
}int main()
{   scanf("%lld%lld", &x, &y);inverse(x, a); inverse(y, b);dfs(a);puts(flag ? "YES" : "NO");return 0;
}

首先肯定要离线,然后还得把n+m个数排个序,那么就可以看作是一系列的连通块,连通块可以合并的条件是左边的最大值+k >= 右边的最小值,那么这就说明假设两个连通块内原本有a个数是n个数中的(a < n), 那么就可以从这两个连通块的范围内取最大的a个数。
 写起来也有点绕,原本想直接set,但是太难写了,然后就改成了优先队列,但发现优先队列不能删除,如果要标记的话就要每个连通块的范围,但这样又想到了可以直接模拟,就直接模拟了,代码有注释

#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <cmath>
#include <map>
#include <queue>
#define mid (l+r>>1)
#define lowbit(x) (x&-x)
using namespace std;
typedef long long LL;
typedef pair<int,int> PII;
const int N = 2e6+10, mod = 998244353;
void mull(int &a, LL b){a = a*b%mod;return ;}
void add(int &a, LL b){a = (a+b)%mod;return ;}pair<int,bool> a[N];  // a 存的是n+m个数 ,second代表的是 是否属于n个数中。
PII Q[N], b[N];       // q 是离线化的询问,答案存在an[]中,b是每个连通块和右边相邻的连通块的差值。
LL x[N], an[N];       // x[]和y[]是方便计算区间答案的前缀和,x[]是a[].first的前缀和,y[]是a[].second的前缀和。
int y[N], l[N], r[N], idx = 1;  // l[],r[] 是连通块的做右端点. LL quary(int l, int r){return x[r]-x[r-y[r]+y[l-1]];}  // 计算l,r 的答案 y[r] - y[l-1] 是可以选择的数量int main()
{   int n, m, q;LL ans = 0;scanf("%d%d%d", &n, &m, &q);m += n;for(int i = 1;i <= m;i ++){scanf("%d", &a[i].first);a[i].second = i <= n;}for(int i = 1;i <= q;i ++){scanf("%d", &Q[i].first);Q[i].second = i;}sort(a+1, a+m+1); a[m+1] = {2e9+1, 0}; // 加个数方便最后不用判断是否变成了一个整体. sort(Q+1, Q+q+1);for(int i = 1;i <= m;i ++){x[i] = a[i].first + x[i-1];    // 前缀和 y[i] = a[i].second + y[i-1];   // 前缀和 b[i] = {a[i+1].first-a[i].first, i}; // 连通块的差值, l[i] = r[i] = i;                     // 初始每个数都是一个连通块 ans += a[i].second ? a[i].first : 0 ;// 初始ans }sort(b+1, b+m+1);    // 按照差值排序 for(int i = 1;i <= q;i ++){int k = Q[i].first, id = Q[i].second;   while(b[idx].first <= k){int R = b[idx].second, L = l[R], t = r[R+1];  // L,R是可合并的左边的连通块的左右端点,R+1,t 是可合并的右边连通块的左右端点。 ans -= quary(L, R) + quary(R+1, t) - quary(L, t);  l[t] = L;  // 把这两个区间和并. r[L] = t;++ idx;}an[id] = ans;}
//  不至于吧,差了500多ms。for(int i = 1;i <= q;i ++) cout<<an[i]<<endl; for(int i = 1;i <= q;i ++) printf("%lld\n", an[i]);return 0;
}

Codeforces Round #760 (Div. 3)相关推荐

  1. Codeforces Round #760 (Div. 3) (ABCDEF)

    Codeforces Round #760 (Div. 3) 题目 A. Polycarp and Sums of Subsequences 题意:t组样例,每组样例输入从小到大输入7个数构成b数组, ...

  2. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

  3. Codeforces Round #563 (Div. 2)/CF1174

    Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...

  4. 构造 Codeforces Round #302 (Div. 2) B Sea and Islands

    题目传送门 1 /* 2 题意:在n^n的海洋里是否有k块陆地 3 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S 4 输出完k个L后,之后全部输出S:) 5 5 10 的例子可以 ...

  5. Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解 比赛链接:h ...

  6. Codeforces Round #712 Div.2(A ~ F) 超高质量题解(每日训练 Day.15 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #712 Div.2(A ~ F) 题解 比赛链接:https:// ...

  7. Codeforces Round #701 (Div. 2) A ~ F ,6题全,超高质量良心题解【每日亿题】2021/2/13

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Add and Divide B - Replace and Keep Sorted C ...

  8. Codeforces Round #700 (Div. 2) D2 Painting the Array II(最通俗易懂的贪心策略讲解)看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 整场比赛的A ~ E 6题全,全部题目超高质量题解链接: Codeforces Round #700 ...

  9. Codeforces Round #699 (Div. 2) F - AB Tree(贪心、树上DP)超级清晰,良心题解,看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #699 (Div. 2) F - AB Tree Problem ...

最新文章

  1. Log控制台打印设置
  2. iptables使用方法
  3. Codeforces 491B. New York Hotel 最远曼哈顿距离
  4. HDU2031 进制转换【进制】
  5. 双十一要来了,设计没思路看看案例
  6. Linux编程(5)_静态库与动态库
  7. 丝蛋白行业调研报告 - 市场现状分析与发展前景预测
  8. 英伟达新禁令:不能随便用GeForce显卡跑深度学习(挖矿可以)
  9. CKEditor设置背景图片及宽高
  10. pdf pmp书籍第六版_PMP项目管理知识体系指南PMBOK第六版高清中文版PDF下载.pdf
  11. TPLink 无线网卡模拟AP无法上网问题
  12. 史上最详细嵌入式系统设计师修炼手册
  13. 学习GIT的一个小游戏
  14. 金铖计算机学校,金铖计算机学校附近好玩的
  15. linux查看exif软件,EXIF信息查看器使用教程及功能解析
  16. uniapp页面通讯-uni.$emit、uni.$on、uni.$once、uni.$off
  17. 要习惯同时兼顾几个学习项目
  18. Word2013写CSDN博客
  19. 用C语言实现推箱子小游戏基础程序plus
  20. html制作阅读界面,用shiny制作html界面

热门文章

  1. inputn函数与input函数的区别
  2. 数据库 流量切分_互联网大厂有哪些分库分表的思路和技巧?
  3. 如何修改pfpj的服务器,如何更改布局?
  4. mysql数据库属性_mysql - 数据库操作和数据属性
  5. java关于异常的面试程序题_Java挑战:最难的十个面试题(附答案)「下」
  6. flask取mysql数据很慢_[flask 优化] 由flask-bootstrap,flask-moment引起的访问速度慢的原因及解决办法...
  7. java文件调用脚本_Java中调用文件中所有bat脚本
  8. c++游戏代码大全_还在学少儿编程?不如来玩工厂编程师,免费学编程逻辑的小游戏...
  9. thinkpadt450s换键盘视频_ikbc c87 入门级有线机械键盘测评
  10. 普通用户nginx访问不了_Nginx降权启动之使用普通用户管理 | it运维_it技术_linux运维-追梦人博客...