Codeforces Round #760 (Div. 3)

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;
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316135.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

acwing3132. 食物(BZOJ3028)

acwing3132. 食物 题意&#xff1a; 你当然要帮他计算携带 N 件物品的方案数。 承德汉堡&#xff1a;偶数个。 可乐&#xff1a;0 个或 1 个。 鸡腿&#xff1a;0 个&#xff0c;1 个或 2 个。 蜜桃多&#xff1a;奇数个。 鸡块&#xff1a;4 的倍数个。 包子&#xff1a;0 个…

持续畅销20年的《C#高级编程》出第11版了!

TA是谁&#xff1f;Wrox精品红皮书&#xff0c;引领无数程序员进入程序开发殿堂&#xff0c;C#专家级指南&#xff0c;是经验丰富的程序员提高效率的更快捷方式&#xff0c;连续畅销20年&#xff0c;累计销量超30万册。TA出生名门&#xff1a;TA战绩辉煌&#xff1a;2019新的征…

cfF. Boring Queries

cfF. Boring Queries 题意&#xff1a; n个数组a[]&#xff0c;q个询问&#xff0c;每次询问区间[l,r]的lcm值 题目要求强制在线 1<n<1e5 1<a<2e5 1<q<1e5 题解&#xff1a; 添加链接描述 添加链接描述 添加链接描述 我们一般求lcm都是直接通过ab/gcd(a…

Educational Codeforces Round 119 (Rated for Div. 2)

D. Exact Change E. Replace the Numbers G. Subsequences Galore 因为1和2的数量最大值不是很多&#xff0c;多了的话可以用3代替&#xff0c;那么枚举1和2的数量然后二分3的数量 int a[110], n; bitset<10> bit; bool ch(int x) {for(int i 1;i < n;i ){int num …

.NET微服务体系结构中为什么使用Ocelot实现API网关

为什么要使用API网关而不是直接通信&#xff1f;在微服务架构中&#xff0c;客户端应用程序通常需要使用来自多个微服务的功能。如果直接执行该消费&#xff0c;则客户端需要处理多个微服务端点以进行呼叫。当应用程序发展并引入新的微服务或更新现有的微服务时会发生什么&…

P2000 拯救世界

P2000 拯救世界 题意&#xff1a; 为了拯救世界&#xff0c;小 a 和 uim 决定召唤出 kkksc03 大神和 lzn 大神。根据古籍记载&#xff0c;召唤出任何一位大神&#xff0c;都需要使用金木水火土五种五行神石来摆一个特定的大阵。而在古籍中&#xff0c;记载是这样的&#xff1…

Codeforces Round #762 (Div. 3)

E. MEX and Increments F. Let’s Play the Hat? G. Unusual Minesweeper H. Permutation and Queries 用个优先队列模拟。 map<int,int>ma; priority_queue<int> q;int main() {int t;scanf("%d", &t);while(t --){int n;scanf("%d", …

基于Jenkins Pipeline的ASP.NET Core持续集成实践

最近在公司实践持续集成&#xff0c;使用到了Jenkins的Pipeline来提高团队基于ASP.NET Core API服务的集成与部署&#xff0c;因此这里总结一下。一、关于持续集成与Jenkins Pipeline1.1 持续集成相关概念互联网软件的开发和发布&#xff0c;已经形成了一套标准流程&#xff0c…

踩不出足迹(牛客练习赛88 )

踩不出足迹(牛客练习赛88 ) 题意&#xff1a; 长度为n的数组a&#xff0c;每个数是一个k位二进制 定义一下操作&#xff1a; 令第一次得到的结果为 a1a_1a1​。你需要从第二个数开始&#xff0c;每次可以选择与上一次得到的结果异或或者同或起来。 问最大值是多少&#xff1f…

Codeforces Round #766 (Div. 2)

D. Not Adding E. Not Escaping F. Not Splitting 直接枚举就行了&#xff0c;原本还想的是素倍数&#xff0c;但是素倍数也不行。 bool dis[N];int main() {int n, x;scanf("%d", &n); int ans -n;while(n --)scanf("%d", &x), dis[x] 1;for(…

编程语言之父谈语言设计,龟叔大赞TypeScript

争论哪门编程语言孰优孰劣&#xff0c;长期以来都是程序员乐此不疲的“娱乐活动”。之所以说是娱乐活动&#xff0c;因为这些争论到最后往往只是各自在发泄情绪&#xff0c;再则就是&#xff0c;脱离使用场景去讨论所谓哪门语言更好并没意义。但如果让编程语言作者坐在一起讨论…

P2656 采蘑菇

P2656 采蘑菇 题意&#xff1a; 有n个点&#xff0c;m个单向边&#xff0c;每个边都有边权&#xff0c;如果经过这个边&#xff0c;可以获得其边权&#xff0c;而其边权会变成原来的p倍(0.1<p<0.8)&#xff0c;向下取整 从s点出发&#xff0c;问最多可以采到的蘑菇 题…

Codeforces Round #764 (Div. 3)

A. Plus One on the Subset B. Make AP C. Division by Two and Permutation D. Palindromes Coloring E. Masha-forgetful F. Interacdive Problem G. MinOr Tree 就是最小值逐步增加到最大值的过程。 int main() {int t;scanf("%d", &t);for(int _ 1;_ <…

你必须知道的 SmartSql

介绍SmartSql MyBatis Cache(Memory | Redis) R/W Splitting Dynamic Repository Diagnostics ......简洁、高效、高性能、扩展性、监控、渐进式开发&#xff01;她是如何工作的&#xff1f;SmartSql 借鉴了 MyBatis 的思想&#xff0c;使用 XML 来管理 SQL &#xff0c;并…

CF785D Anton and School - 2

CF785D Anton and School - 2 题意&#xff1a; 给定一个长度≤210^5由(和)组成的字符串&#xff0c;问有多少个子串&#xff08;可以不连续&#xff09;&#xff0c;前半部分是由(组成后半部分由)组成. 题解&#xff1a; 怎么括号匹配能出这么多题 如何才能不重不漏的选出…

OsharpNS轻量级.net core快速开发框架简明入门教程

OsharpNS官方资源项目地址&#xff1a;https://github.com/i66soft/osharp-ns20演示地址&#xff1a;https://www.osharp.org 直接使用QQ登录可以查看效果文档地址&#xff1a;https://docs.osharp.org 正在完善中....发布博客&#xff1a;https://www.cnblogs.com/guomingfeng…

cf1491C. Pekora and Trampoline

cf1491C. Pekora and Trampoline 题意&#xff1a; 有n个蹦床&#xff0c;每个蹦床有它的弹力值bib_{i}bi​,从i蹦床起跳可以落到ibiib_{i}ibi​的位置上(前提是这个位置有蹦床)&#xff0c;跳完后&#xff0c;蹦床的弹力值会减1&#xff0c; 题解&#xff1a; 对于一个蹦床…

.net core 注入机制与Autofac

本来是要先出注入机制再出 管道 的&#xff0c;哈哈哈……就是不按计划来……这里扯扯题外话&#xff1a;为什么要注入&#xff08;DI&#xff0c;dependency-injection&#xff09;&#xff0c;而不用 new 对象&#xff1f;可能我们都很清楚&#xff0c;new 对象所造成的影响就…

2021 年第十三届四川省 ACM-ICPC 大学生程序设计竞赛

2021 年第十三届四川省 ACM-ICPC 大学生程序设计竞赛 题号题目知识点AChuanpai水题BHotpot贪心CTriangle PendantDRock Paper Scissors队友做的不知道EDon’t Really Like How The Story Ends思维栈FDirection SettingGHourly Coding ProblemHNihongo wa Muzukashii D模拟IMon…

浅析 .Net Core中Json配置的自动更新

Pre很早在看 Jesse 的Asp.net Core快速入门的课程的时候就了解到了在Asp .net core中,如果添加的Json配置被更改了,是支持自动重载配置的,作为一名有着严重"造轮子"情节的程序员,最近在折腾一个博客系统,也想造出一个这样能自动更新以Mysql为数据源的ConfigureSource…