题目链接

题意:给一个数列,问通过操作:a[i]=a[i]%x(x自己选择)后,能不能成为1到n的排序,如果能,输出最小操作次数,否则输出-1.

解法:对数组a排序后,先把a中出现的1~n的数删掉最多一个,并标记,因为这个数对可以不经过操作而作为答案的一份子。然后遍历排序后的数组,k为当前的位置应该能操作后得到的数,当a[i]不能变成k,直接输出-1.

对a[i]取模可以得到的数范围0~(a[i]-1)/2

#include<bits/stdc++.h>
#define fo(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
typedef long long ll;
int a[100005],b[100005];
int main() {ios::sync_with_stdio(false);cin.tie(0);int t, n;cin >> t;while (t--) {cin >> n;int pan=1, ans = 0,k=1;for (int i = 1; i <= n; i++) { cin >> a[i]; b[i] = 0; }sort(a + 1, a + 1 + n);deque<int>q; for (int i = 1; i <= n; i++) { if (a[i] <= n && b[a[i]] == 0) {b[a[i]] = 1;continue;}q.push_back(a[i]);}while (k <= n && pan) {while (1) {while (b[k])k++;if (k > n)break;if (q.size() == 0) { pan = 0; break; }int res = q.front(); q.pop_front();if (res < k) { pan = 0; break; }else if (res == k) { k++; break; }else {if (res > k * 2) { ans++; k++; break; }else {pan = 0; break;}}}}if (pan)cout << ans << endl;else cout << -1 << endl;}return 0;
}

CF 1617C. Paprika and Permutation相关推荐

  1. C. Paprika and Permutation

    C. Paprika and Permutation 问题描述 题意 给你n个数,定义这样一个操作,对于一个数a,任取一个x>0,使得a=a%x.对这n个数至少进行k次这样的操作后如果能得到1~ ...

  2. cf 1512 E. Permutation by Sum

    cf 1512 E. Permutation by Sum 题意: 我们定义排列的概念为:从1到n的整数组成的序列,每个数字只出现一次 现在给你n,l,r,s,让你构造一个长度为n的排列,使得其中的第 ...

  3. 【2019雅礼集训】【CF 960G】【第一类斯特林数】【NTT多项式】permutation

    目录 题意 输入格式 输出格式 思路 代码 题意 找有多少个长度为n的排列,使得从左往右数,有a个元素比之前的所有数字都大,从右往左数,有b个元素比之后的所有数字都大. n<=2*10^5,a, ...

  4. CF#303A Lucky Permutation Triple 数论

    题意:要求给出一个数N的余数系的三个排列A, B, C,其中使得对于任意的 i 满足(A[i] + B[i]) % N = C[i]. 例如N=5的时候有一下排列: A: 1 4 3 2 0 B: 1 ...

  5. CF Round Div.3-E Obtain a Permutation //数学规律

    题目链接 http://codeforces.com/contest/1294/problem/E 题意 给你一个 n × m n×m n×m 的矩阵(元素从 1 − n × m 1-n×m 1−n× ...

  6. [cf 1091D]D. New Year and the Permutation Concatenation

    新版题解链接:https://blog.csdn.net/aiqiyizz/article/details/115579003 题意:给n!个n的排列,按字典序从小到大连成一条序列,例如3的情况为:[ ...

  7. [CF]Codeforces Round #529 (Div. 3)

    [CF]Codeforces Round #529 (Div. 3) C. Powers Of Two Description A positive integer xx is called a po ...

  8. CF #764 Div.3(B ~D)

    CF #764 Div.3 B题 Make AP 给定a b c 使其中一个数 乘 任意正整数m 问是否能构成成差数列 我们可以想到等差数列的性质 2b=a+c2b = a + c 2b=a+c 思路 ...

  9. 【cf】Codeforces 题解等汇总

    [cf]Codeforces Round #774 (Div. 2) 前4题 [cf]Codeforces Round #774 (Div. 2) 前4题_legend_yst的博客-CSDN博客 [ ...

最新文章

  1. Python-Pandas 如何shuffle(打乱)数据?
  2. Java UDP 编程简介.
  3. 树节点的遍历,查找,删除(前序,中序,后序)
  4. python数据库增删改查_python实现数据库增删改查
  5. 图像风格迁移(Neural Style)简史
  6. 用Netty撸一个心跳机制和断线重连!
  7. A1107班拜年视频录制过程记录
  8. Java:月份的中英文转换
  9. Asterisk目录结构如下
  10. android gpu 编程,Android设备上的GPU编程
  11. Hbase二级索引入门
  12. 开源|Davinci用户体验:你离数据可视精美大屏只差一个Davinci!
  13. define定义的函数如何引用_3分钟短文:Laravel 编程中优雅地添加定义常量
  14. python清理浏览器缓存_浏览器缓存看这一篇就够了
  15. 数据持久化(Json,二进制,PlayerPrefs)
  16. mysql now()函数调用系统时间不对修正方法
  17. 首出集团:超级推荐引爆流量,6步店铺跨越到第六层级
  18. PromQL 直方图 跟踪请求的延迟或响应大小 99%的请求是在多少延迟下完成的?
  19. linux限制网口带宽指令,Linux使用wondershaper限制网络带宽
  20. #203-[DFS]狼和羊

热门文章

  1. unity3d collider自动调整大小_Unity 3D | 美术向系列教程2_地形系统介绍
  2. event对象的一些方法(取消冒泡,阻止默认行为)
  3. mix1 android n,因为一条评论引发的讨论——论MIX系列垮掉的第一代
  4. DataFound 2019用户画像竞赛分析
  5. 遍历字符串字符 php,php逐个汉字遍历字符串
  6. 2022危险化学品生产单位安全生产管理人员培训试题及答案
  7. flexpaper java 例子_Flexpaper二次开发入门教程》(十) Flexpaper简单使用-第一个Flexpaper例子...
  8. 12c/19c unplug/plug迁移PDB
  9. 在Linux防火墙上过滤外来的ICMP timestamp和禁止Traceroute探测
  10. 《惢客创业日记》2020.12.25(周五)咸鱼变鲶鱼