A 题就是一个预处理然后进行枚举

首先数据范围不是很大

然后我们依照题意看看如何构造出对应的要求,也就是说我们需要在不同的下标下使得 ai*aj=1 那么只有1 1 或者-1 -1 那么这个不管是1 1 还是-1 -1  必然是对称的    那么要多少个1 可以组成对应要求 我们可以发现(简单数学)

如果是一个1 那么就是0

两个1  就是1

3 个1 就是 2

也就是从 2 之后每次出现的1 都可以和前面的所有的1 组合

那么对应每个1 的个数我们就可以预处理出可以组成多少不同下标乘积是1 (ai*aj==1)

那么对于 -1 是同理

void intn()
{f[2]=1;for(int i=3;i<=111;i++) f[i]=f[i-1]+i-1;
}

那么由于我们可以使用1 的组合以及-1 的组合那么所有的组合的答案就是

1 的答案加上-1 的答案

for(int i=1;i<=n;i++){if(f[i]+f[n-i]==m){cout<<"YES"<<endl;for(int j=1;j<=i;j++) cout<<1<<" ";for(int j=1;j<=n-i;j++) cout<<-1<<" ";cout<<endl;return ;}}

AC 代码如下捏

// 数学公式要变形
// 莫急莫急先读题
#include <bits/stdc++.h>
using namespace std;
#define lowbit(x) (x&(-x))
#define endl "\n"
#define ios ios::sync_with_stdio(0); cin.tie(0),cout.tie(0);
#define LF(x)   fixed<<setprecision(x)// c++ 保留小数
typedef long long LL;
typedef pair<int,int> PII;
const int N=1000010,M=1010,F=2*N,INF=0x3f3f3f3f;
const double pai=acos(-1.0);// pai
map<int,int> q;
int t,n,m;
int f[N],ans[N];
void intn()
{f[2]=1;for(int i=3;i<=111;i++) f[i]=f[i-1]+i-1;
}
void solve()
{cin>>n>>m;for(int i=1;i<=n;i++){if(f[i]+f[n-i]==m){cout<<"YES"<<endl;for(int j=1;j<=i;j++) cout<<1<<" ";for(int j=1;j<=n-i;j++) cout<<-1<<" ";cout<<endl;return ;}}cout<<"NO"<<endl;return ;
}int main ()
{ios// 不能有printf puts scanfintn();cin>>t;while(t--)solve();return 0;
}

B题就是一个类似模拟的位置变化要找到核心

1.首先我们要搞清楚一个元素会被如何交换一个元素只能被交换到 现在的位置和m差值的倍数的位置那么如果一个数没办法通过m的交换到达自己的位置那必然药进行初步交换,到这里答案就出来的

比如   一个数的下标是1 m=3 那么1 只会移动到 4  7 10.....

2.有人说为什么会这样想 其实你要发掘题目给的性质 要深入去思考 然后自己模拟一下 这个有些题就很快能思考到

3。那么如果错位的也就是没办法通过m交换达到的如果要初次交换 那么一定是两个  (有人会问会不会是一个呢?) 你可以试试或者再思考一下是不会的

那么多余2的就是不可以通过初次交换的咯

// 数学公式要变形
// 莫急莫急先读题
#include <bits/stdc++.h>
using namespace std;
#define lowbit(x) (x&(-x))
#define endl "\n"
#define ios ios::sync_with_stdio(0); cin.tie(0),cout.tie(0);
#define LF(x)   fixed<<setprecision(x)// c++ 保留小数
typedef long long LL;
typedef pair<int,int> PII;
const int N=1000010,M=1010,F=2*N,INF=0x3f3f3f3f;
const double pai=acos(-1.0);// pai
map<int,int> q;
int t,n,m;
int a[N];
void solve()
{cin>>n>>m;for(int i=1;i<=n;i++) cin>>a[i];int ans=0;for(int i=1;i<=n;i++){if(abs(a[i]-i)%m!=0) ans++; }if(!ans) cout<<0<<endl;else if(ans==2) cout<<1<<endl;else cout<<-1<<endl;return ;
}int main ()
{ios// 不能有printf puts scanfcin>>t;while(t--)solve();return 0;
}

C题是一个模拟?思考思考其实不难

1. 首先要知道啥是强复合 然后思考如何组成强复合

2. 题目意思是要通过a1*a2*a3*....*ai 而且a的范围是2-1e7 那么连乘会爆 这是一种算是提醒必然是对每一个数单独处理    题目要求构造强复合数去和a的连乘相等要让b数组的长度最大

3. 那么我们就要利用a的元素去构造b那么由于和质数有关那么我们就想是不是要把a分解质数?

还有何如构造使得b最长呢? b最长那就是使得每个b的元素越小并且满足要求越好 也就是如何构造最小的强复合数   所有的答案都指向了质数 那么我们就开始看 如何变 我们可以发现如果是一个质数和他自己配对的话直接就是强复合

(1)比如 2    2*2=4  4是强复合

也就是如果a是质数  那么b=a*a    b 的约数是1 a b 那么b就是强复合  所以对于每一个质数和自己的乘积都是强复合

(2)如果不是自己呢? 我们可以试一下  2  3 乘积是6 那么6 的约数是  1 2 3 6 不是

但是如果是3 个不同的呢  2 3 5     30  的约数是1 2 3 5 6 1015 30 是强复合为啥呢?因为每两个不同质数可以构造一个合数  那么3 个不同的就可以构造  3 个加上3个数连乘 就是4 个了那么此时也可以    对于以上我们就 不用考虑了

那么如何把ai同质数连续起来呢? 我的上一篇博客也提到了就是质数分解定理时间复杂度根号n

int x; cin>>x;for(int i=2;i*i<=x;i++){if(x%i==0){while(x%i==0) x/=i,q[i]++;}}if(x>1) q[x]++;

为要判断x>1 呢? 因为可能是一个大质数

如果有小伙伴有疑惑于质数分解定理可以自己用线性筛的思维去思考一下就会理解了

然后你当然要把每一个数的算在一起可不能每个数单独用一个数组存起来 这样就会少算

把2 的加起来  3 的加起来   依次类推(map大法)

for(auto &[k,v]:q) {ans+=v/2;m+=v%2;}ans+=m/3;

然后取出来每一个数的数量然后把多的加起来最后除以3 就好了

当然写之前要自己看一下时间复杂度 当然是稳的再开始写不然就自己再思考优化一下不然被tle哦

// 数学公式要变形
// 莫急莫急先读题
#include <bits/stdc++.h>
using namespace std;
#define lowbit(x) (x&(-x))
#define endl "\n"
#define ios ios::sync_with_stdio(0); cin.tie(0),cout.tie(0);
#define LF(x)   fixed<<setprecision(x)// c++ 保留小数
typedef long long LL;
typedef pair<int,int> PII;
const int N=10000010,M=1010,F=2*N,INF=0x3f3f3f3f;
const double pai=acos(-1.0);// pai
map<LL,int> q;
int t,n;
void solve()
{cin>>n;LL cnt=0,ans=0,m=0;for(int i=1;i<=n;i++) {int x; cin>>x;for(int j=2;j*j<=x;j++){if(x%j==0){while(x%j==0) x/=j,q[j]++;}}if(x>1) q[x]++;}for(auto &[k,v]:q) {ans+=v/2;m+=v%2;}ans+=m/3;cout<<ans<<endl;q.clear();return ;
}int main ()
{ios// 不能有printf puts scanfcin>>t;while(t--)solve();return 0;
}

后面的题由于本人实力不够就没啦,一起进步吧,如有问题欢迎读者指正,觉得还行就给一个免费的赞支持一下吧嘻嘻

CF 868 div2 A—C相关推荐

  1. CF 400 div2

    从昨天周赛开始,要耍CF了~ 开始还害怕个人赛自己数论压根不会怎么办,发现CF全是乱搞的题orz 但是就算是乱搞的也不能1A  T^T 犯的错误基本上都是没有把情况归类导致要么是情况想少了,要么是细节 ...

  2. CF #673 div2 赛后总结

    文章目录 前言 A B C D E F 前言 完成成就:在学校熬夜熬到1点 第一次CF打比赛就炸成这个样子 A 题目翻译: 一个长度为 n n n的数组,每次选择 i , j ( 1 ≤ i , j ...

  3. 【CF#468 div2 D. 】Peculiar apple-tree(思维)

    题干: In Arcady's garden there grows a peculiar apple-tree that fruits one time per year. Its peculiar ...

  4. cf#644 div2 B. Boboniu Plays Chess

    惯例,粘个生草翻译 这题比第一题还简单(简单多了 ) 虽然题面不短,但仔细读就会发现条件不多 刚开始我误以为是一笔画的题,但题中的棋子不同,他是車 ,棋子可以直接跳过一个点,也就是上下左右随便走,那就 ...

  5. 【CF #781 Div2】A-C

    A. GCD vs LCM 题目 分析 给一个数n,使满足条件: a+b+c+d=n,ab的最大公因数为,cd的最小公倍数. b,c,d值都为1,最大公因数及最小公倍数都为1,a=n-3 代码 #in ...

  6. 【CF #777 div2】A-C

    A. Madoka and Math Dad 题目 分析 给一个n,构造一个数字,使这个数字每位和为n且这个数字相邻各位不能相等,且这个数是所有数中最大的. 要使数字最大,肯定要使位数尽可能的多,而且 ...

  7. [cf] 752 div2 B. XOR Specia-LIS-t

    前言 tag:tag:tag:异或 思维 贪心 *1100 传送门 : 题意 : 给定一个数组,询问 是否可以将数组分为任意段,使得每段中的最长上升子序列的异或值为000 思路 : 我们分贪心的分奇偶 ...

  8. CF 192 DIV2

    A. Cakeminator 题目链接 大水题,前提是要看懂题目 思路:记录一行都不存在草莓的行数s1,一列都不存在草莓的列数s2,然后求总格数,公式:s=s1*m+s2*n-s1*s2 代码: #i ...

  9. CF - E95(div2) -- B. Negative Prefixes【贪心】

    题意 给定一个序列,然后给定那些位置被锁定不能被移动,将序列可移动的数随机移动,移动后为a1, a2, a3-an; 设p1 = a1 ,p2 = a1 + a2 ,p为a的前缀和,k为前缀和中pi ...

最新文章

  1. java 捕获异常并存入数据库_java异常处理,报异常的话怎么处理对象值,并持久化到数据库中...
  2. 小时候的小霸王游戏!坦克大战 超级玛丽 魂斗罗 忍者神龟 都有!
  3. Oracle 并行原理与示例总结
  4. 3个月带你通关Go语言
  5. 导致SEO优化排名不理想的三大因素,你踩雷了没?
  6. 【Windows 10 应用开发】使用快捷访问键
  7. 20位数字转化成6位不重复码_人力资源管理浅析身份证数字号码编排常识甄别年龄、性别、籍贯…...
  8. DB2 常用命令小结
  9. Error和Exception(异常)
  10. element-UI级联选择器(Cascader)获取label值 - 代码篇
  11. Linux 中的grep命令单引号,不加任何参数以及双引号的作用
  12. jquery和Js的区别和基础操作
  13. MATLAB2016笔记(六):数据可视化
  14. 知乎到底什么是前后端分离?
  15. PS模仿欢乐颂电视剧海报的水彩效果
  16. SmartBI入门(二)配置SmartBI
  17. 4.3 期货每日早盘操作建议
  18. ffmpeg filter amix混音实现
  19. 自然语言处理技术的三个里程碑
  20. S60手机真机调试心得

热门文章

  1. 楼道灯人体红外感应电路(半波式)
  2. java学习中,DVD管理系统纯代码(java 学习中的小记录)
  3. SCI论文并没有想像中的难写,发表SCI论文的小技巧。2012年和2013年SCI期刊论文和EI期刊论文
  4. SSM框架的基本概念(什么是ssm框架?)
  5. 记录一下uni-app开发中遇到的坑
  6. LeetCode 41-50题
  7. spring学习笔记(spring概述和IOC)
  8. python3的txt文件读写
  9. excel:超链接应用,快速生成目录的几个方法
  10. 从“来现场POC”到“去线下店体验”:我的数据治理产品选型经历