CF1270G Subset with Zero Sum
首先一定要从每个数的范围 \(i - n \le a_i \le i - 1\) 入手,最开始是这样一个想法,不难发现对于每个 \(i\) 都能选 \(n\) 个数,并且能选的右端点在 \(i - 1\),那么我们可以吧每个 \(i\) 前移一位,实际上就是 \(0 \sim n - 1\) 这些位置上选没选数,而如果这个位置上没选那么就一定选在了前面,实际上这样还是非常不好做,于是我考虑只选择了一个负数的情况,发现还是不能发现一种简便的方法来找出这个集合,因此我们需要换一种方式思考。
既然分析性质行不通,我们可以考虑直接构造出答案。像这种找到一个集合满足一些条件的题目,我们可以将其转化为图论问题,例如求一个连通块的权值和为特定值或者找到一个环使得环上权值和为特定值,转化方式就需要巧妙的连边了。因为 \(a_i\) 涉及到负数不方便连边,于是我们可以对于每个 \(a_i\) 增添一个增量 \(k\),即将 \(a_i \rightarrow b_i = a_i + k_i\) 那么原问题就转化为寻找一个集合使得 \(\sum b_i = \sum k_i\)。我的想法是对于每个 \(i\) 我们连边 \(i \rightarrow a_i + k_i\) 可以发现这中间有 \(n\) 条边,因为是有向边我们找联通块不方便,因此可以考虑找环。于是我们接下来的目的就是寻找一个合适的 \(k_i\) 使得连出来环上的边满足上述条件,然后我就不会做了,下面的做法只能无限 \(\rm stO\) 出题人。首先我们需要注意到这样一件事,如果刚好 \(n\) 个点,\(n\) 条边那么图中一定会存在一个环,于是我们就可以让 \(1 \le a_i + k_i \le n\) 那么这样就一定会出现环了,与此同时我们需要注意到一个如果要满足 \(\sum b_i = \sum k_i\) 那么不难发现环上的权值和要是编号和,事实上根据之前的连边如果能出现环那么环上的权值和一定是编号和,因为我们是每个编号 \(i\) 向外连一条边。再观察一下数据范围 \(i - n \le a_i \le i - 1\),两边不正好出现了 \(1, n\) 吗?先把两边减去 \(i\) 可得 \(-n \le a_i - i \le -1\) 再反个号 \(1 \le i - a_i \le n\) 不就是我们想要的东西吗?于是对于每个 \(i\) 我们连边 \(i \rightarrow i - a_i\) 再在图上找一个环即可。注意多组数据不能直接 \(\rm memset\)。
#include<bits/stdc++.h>
using namespace std;
#define N 1000000 + 5
#define rep(i, l, r) for(int i = l; i <= r; ++i)
bool book[N];
int T, n, x, top, cnt, a[N], fa[N], st[N], ans[N];
int read(){
char c; int x = 0, f = 1;
c = getchar();
while(c > '9' || c < '0'){ if(c == '-') f = -1; c = getchar();}
while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * f;
}
int main(){
T = read();
while(T--){
n = read();
rep(i, 1, n) a[i] = read(), fa[i] = i - a[i];
x = 1, cnt = top = 0;
while(!book[x]) book[x] = true, st[++top] = x, x = fa[x];
while(st[top] != x) book[st[top]] = false, ans[++cnt] = st[top--];
ans[++cnt] = st[top];
while(top) book[st[top--]] = false;
printf("%d\n", cnt);
rep(i, 1, cnt) printf("%d ", ans[i]); puts("");
}
return 0;
}
CF1270G Subset with Zero Sum的更多相关文章
- 2021record
2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...
- 动态规划法(三)子集和问题(Subset sum problem)
继续讲故事~~ 上次讲到我们的主人公丁丁,用神奇的动态规划法解决了杂货店老板的两个找零钱问题,得到了老板的肯定.之后,他就决心去大城市闯荡了,看一看外面更大的世界. 这天,丁丁刚回到家,他 ...
- 698. Partition to K Equal Sum Subsets
Given an array of integers nums and a positive integer k, find whether it's possible to divide this ...
- CF1249F Maximum Weight Subset
CF1249F Maximum Weight Subset 洛谷评测传送门 题目描述 You are given a tree, which consists of nn vertices. Reca ...
- codeforces 360 E - The Values You Can Make
E - The Values You Can Make Description Pari wants to buy an expensive chocolate from Arya. She has ...
- E - The Values You Can Make
E - The Values You Can Make Description Pari wants to buy an expensive chocolate from Arya. She has ...
- C - NP-Hard Problem
C - NP-Hard Problem Crawling in process... Crawling failed Time Limit:2000MS Memory Limit:262144 ...
- CF687C. The Values You Can Make[背包DP]
C. The Values You Can Make time limit per test 2 seconds memory limit per test 256 megabytes input s ...
- Codeforces Round #360 (Div. 2) E. The Values You Can Make DP
E. The Values You Can Make Pari wants to buy an expensive chocolate from Arya. She has n coins, ...
随机推荐
- 突破技术限制,实现Web端静默打印
作为Web开发的同僚们,估计都有一个共同的烦恼,Web端为什么不能够像 CS端那样直接打印预览?直接移除掉打印预览界面不就可以了? 真实情况是Web端受限于浏览器的权限,无法直接访问打印机等本机资源. ...
- GitForWindows工具集(GitBash命令行)
1.Git For Windows工具集 Git For Windows专注于提供一套轻量级的本地工具集, 它将Git SCM的完整功能集引入Windows, 同时为Git用户提供适当的用户界面, 方 ...
- Flutter 让你的Dialog脱胎换骨吧!(Attach,Dialog,Loading,Toast)
前言 Q:你一生中闻过最臭的东西,是什么? A:我那早已腐烂的梦. 兄弟萌!!!我又来了! 这次,我能自信的对大家说:我终于给大家带了一个,能真正帮助大家解决诸多坑比场景的pub包! 将之前的flut ...
- nginx配置指定域名访问,nginx禁止ip访问,配置空主机头 syscal
1.大家有过这方面的困扰,就是自己的网站给其他人恶意域名解析到自己的服务器ip上. 特别不爽,那大家可以用用空主机头的方法. 先给大家看下我的nginx.conf配置 http { log_forma ...
- 马哈鱼血缘分析工具部署介绍--win 10
马哈鱼血缘分析工具部署介绍--win 10 随着大数据技术的发展与普及,数据治理和数据质量变得越来越重要,数据血缘分析在业界悄然兴起并得到了广泛流行,马哈鱼是国内少有的一款专业且易用的血缘分析工具.本 ...
- ProE许可、PTC许可、Creo许可、许可分析、分析许可
Pro/Engineer操作软件(又简称ProE)是美国参数技术公司(PTC)旗下的CAD/CAM/CAE一体化的三维软件,Creo是美国PTC公司于2010年10月推出CAD设计软件包,creo是P ...
- 模拟axios的创建[ 实现调用axios()自身发送请求或调用属性的方法发送请求axios.request() ]
1.axios 函数对象(可以作为函数使用去发送请求,也可以作为对象调用request方法发送请求) ❀ 一开始axios是一个函数,但是后续又给它添加上了一些属性[ 方法属性] ■ 举例子(axio ...
- 记录一个问题:macos High Sierra 10.13.6 内核内存泄漏,导致内存满而不得不重启
kernel_task进程占用内存10g以上,使用中突然提示内存不足,要求杀死工作进程,不得不强按电源键来关机重启. 升级之前,版本大约是macos High Sierra 10.13.4, 系统频繁 ...
- 根据happens-before法则借助同步
在文章的开始,我们先来看一段代码以及他的执行情况: public class PossibleRecording{ static int x = 0, y = 0; static int a = 0, ...
- 处理json中的空格
很多json中带有空格 而json解析类很多自带去空行 导致解析json如下 只能在解析之前用"111111"之类的替换 之后再替换回来 result = result.Repla ...