C. Paprika and Permutation

问题描述

题意

给你n个数,定义这样一个操作,对于一个数a,任取一个x>0,使得a=a%x。对这n个数至少进行k次这样的操作后如果能得到1~n的排列,则输出k。不管进行多少次操作都得不到,就输出-1。

例如,给你1 2 3 4 18 19 5 6 7这九个数。可以至少通过2次操作得到1,2,3,4,18%10,19%10,5,6,7>>1,2,3,4,8,9,5,6,7为1~9的全排列,故输出2.

题解 

我们想要找到最小的k,得到1~n的全排列,那么我们选择操作数的时候要选择1~n之外的数或者重复出现的数进行操作,所以在读入数据时我们先判断是不是1~n之间的数,如果时1~n之间的数并且是首次出现就不用放到我们的要进行操作数组中,用一个bool数组来标记1~n中已经出现的数。

对于操作数组中的数,先进行排序,然后再与1~n中未出现的数对应起来,将操作数与与之对应的1~n中的数比对,如果操作数小于等于所要变成的数的2倍则操作数无法通过操作变成1~n中的对应数,直接输出-1.如果遍历完操作数组,则全部操作数变成1~n中的未出现的数,就得到了1~n的全排列。(可能有点啰嗦,代码比较清晰)

AC代码

/*@_krito*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define LM LLONG_MAX
#define IM INT_MAX
#define N 100001
int main(){int t;cin>>t;while(t--){int n,a[N],ans=0,m=0;bool vis[N]={0},flag=1;cin>>n;for(int i=1;i<=n;i++){int temp;scanf("%d",&temp);if(temp<=n&&temp>=1&&!vis[temp]){vis[temp]=true;continue;}m++;a[m]=temp;}sort(a+1,a+1+m);int j=1;for(int i=1;i<=n;i++){if(vis[i]) continue;if(a[j]<=2*i){flag=0;break;}if(a[j]>i){ans++;j++;}}if(flag&&j-1==m) cout<<ans<<endl;else cout<<-1<<endl;}
} 

这里一并给出a,b两题的解法.

B. GCD Problem

题意

给一个数n,找到三个数满足a+b+c=n,且a,b的最大公约数为c,并输出。

题解

对于偶数n,我们可以将他拆成2,n-3,1输出即可。

n-3为奇数,2为偶数,所以他们的最大公约数只能是1。

对于奇数n,我们可以将他拆成两个互质的数和1.

两个互质的数的最大公约数只能是1。

如果要证明为什么一定能这样拆,其实等价于证明一个9的偶数可以被拆成两个互质的数,其实凭感觉就是对的,在此不做证明。

AC代码

/*@_krito*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define LM LLONG_MAX
#define IM INT_MAX
ll gcd (ll a, ll b) {return b==0 ? a : gcd(b, a%b);}
int main(){int t;cin>>t;while(t--){ll n;cin>>n;if(n%2==0) cout<<n-3<<" 2 "<<"1"<<endl;else {int i=2;while(gcd(i,n-i-1)>1) i++;cout<<i<<" "<<n-i-1<<" "<<1<<endl;}}
}

A. Forbidden Subsequence

太简单了,懒得截图。看到这想必你也不需要题目描述了

AC代码 

/*@_krito*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define LM LLONG_MAX
#define IM INT_MAXint main(){int t;cin>>t;while(t--){string a,b;cin>>a>>b;int len=a.length();sort(a.begin(),a.end());bool f=false,vis[101]={0};for(int i=0;i<=1;i++){if(b[i]>b[i+1]) f=true;}if(f){re:for(int i=0;i<len;i++){cout<<a[i];}}else {int i;for(i=0;a[i]=='a';i++)cout<<a[i];if(i==0) goto re;for(;a[i]=='b';i++);for(;a[i]=='c';i++) cout<<a[i];for(int j=0;j<len;j++) if(a[j]=='b') cout<<a[j];for(;i<len;i++) cout<<a[i]; }cout<<endl;}
}

cf上div3,div2的前三题多为思维题,码量很小,很适合锻炼思维(很有意思)。

C. Paprika and Permutation相关推荐

  1. CF 1617C. Paprika and Permutation

    题目链接 题意:给一个数列,问通过操作:a[i]=a[i]%x(x自己选择)后,能不能成为1到n的排序,如果能,输出最小操作次数,否则输出-1. 解法:对数组a排序后,先把a中出现的1~n的数删掉最多 ...

  2. 【C++】C++11 STL算法(七):排列操作(Permutation operations)、数值操作(Numeric operations)

    排列操作(Permutation operations) 一.is_permutation 1.原型: template< class ForwardIt1, class ForwardIt2 ...

  3. LeetCode 76. Minimum Window Substring / 567. Permutation in String

    76. Minimum Window Substring 典型Sliding Window的问题,维护一个区间,当区间满足要求则进行比较选择较小的字串,重新修改start位置. 思路虽然不难,但是如何 ...

  4. R语言使用lmPerm包应用于线性模型的置换方法(置换检验、permutation tests)、使用lm模型构建简单线性回归模型、使用lmp函数生成置换检验回归分析模型

    R语言使用lmPerm包应用于线性模型的置换方法(置换检验.permutation tests).使用lm模型构建简单线性回归模型.使用lmp函数生成置换检验回归分析模型(Permutation te ...

  5. R语言使用coin包应用于独立性问题的置换检验(permutation tests、响应变量是否独立于组、两个数值变量是独立的吗、两个分类变量是独立的吗)、以及coin包的常用置换检验函数

    R语言使用coin包应用于独立性问题的置换检验(permutation tests.响应变量是否独立于组.两个数值变量是独立的吗.两个分类变量是独立的吗).以及coin包的常用置换检验函数 目录

  6. R语言使用coin包应用于独立性问题的置换检验(permutation tests)、使用普通cor.test函数和置换近似spearman_test函数、检验变量的相关性的显著性

    R语言使用coin包应用于独立性问题的置换检验(permutation tests).使用普通cor.test函数和置换近似spearman_test函数.检验变量的相关性的显著性(correlati ...

  7. R语言使用coin包应用于分类变量独立性问题的置换检验(permutation tests)、使用普通卡方检验chisq.test函数和置换近似卡方检验chisq.test函数、检验分类变量的独立性

    R语言使用coin包应用于分类变量独立性问题的置换检验(permutation tests).使用普通卡方检验chisq.test函数和置换近似卡方检验chisq.test函数.检验分类变量的独立性( ...

  8. R语言置换检验(permutation tests、响应变量是否独立于组、两个数值变量是独立的吗、两个分类变量是独立的吗)、置换检验的基本步骤、R语言自助法Bootstrapping计算置信区间

    R语言置换检验(permutation tests.响应变量是否独立于组.两个数值变量是独立的吗.两个分类变量是独立的吗).置换检验的基本步骤.R语言自助法Bootstrapping.自助法计算单个统 ...

  9. np.random.permutation

    np.random.permutation np.random.permutation():随机排列序列. 例1:对0-5之间的序列进行随机排序 例2:对一个list进行随机排序 多维度的咋回事? 来 ...

最新文章

  1. orb 算法源码实现
  2. HDU2521 反素数【因子数量+打表】
  3. 如此智能的Windows Embedded Standard 7
  4. GAIR 2020 工业互联网专场演讲实录:腾讯云人工智能在工业互联网领域的实践
  5. 数据持久化------Archiving(归档,解档)
  6. 试用期java_Java 7试用资源
  7. IntelliJ IDEA 2020 数据库连接Oracle和Mysql
  8. Spring的基本应用
  9. Linux段错误-转
  10. vue报错问题记录1-Cannot read property '0' of null
  11. python 类方法 静态方法_Python静态方法和类方法
  12. 阔少躁郁症发作 狂买手机送朋友
  13. 基于Java毕业设计在线购书商城系统源码+系统+mysql+lw文档+部署软件
  14. 复现贪吃蛇程序——判断游戏失败(第四部分)
  15. 综述国内外三维视觉测量系统的发展现状
  16. thinkphp3.2.3 支付宝授权登录php
  17. 2020年度整理国内一线互联网公司内部Android面试题库,android网络文件下载
  18. 固态硬盘的计算机需要进行磁盘碎片整理吗,SSD硬盘为何不需要磁盘碎片整理?...
  19. vue 报错vue : 无法加载文件 D:\wjx_tools\node\node_global\vue.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsof
  20. 电脑桌面点击计算机反应迟钝,电脑桌面刷新反应慢?一个小操作即可解决!

热门文章

  1. python3 - RC4 算法
  2. 【CVPR】Calibrated RGB-D Salient Object Detection
  3. MyBatis以及Druid 防止sql注入攻击
  4. linux之crond服务,定时任务crond服务
  5. unity 创不了文件 Creating Project folder failed!
  6. Tomcat部署前端以及jar包部署
  7. JDK8-JDK17中的新特性(var类型推断、模式匹配、Record、密封类)
  8. 鸿蒙os开发哪里学,鸿蒙OS发布以后,我们去哪里学习?
  9. 图像色彩增强论文调研
  10. 华为新系统鸿蒙手机测试,首个华为鸿蒙2.0测试 电池续航提升将近10%