ABC Conjecture

题意:给定一个数c,请你判断是否存在这样的两个数a和b,满足a+b=c,并且abc的质因子的乘积小于c(重复的质因子视为一个)。

思路:我首先发现对于这个题来讲,第一个条件基本没用,重点在于第二个条件,只要满足第二个条件就可以了,那么怎么满足呢?

发现当c的质因子出现重复的时候,c的所有种类质因子的乘积一定是小于c的,同时可以根据这些质因子来创两个数,使得这两个数的和等于c,所以问题转变为判断c是有某个质因子出现重复。那么重复是什么?也就是平方,立方,四次方等等,最简单的方式就是平方,只要判断一个数能否被某个平方数整除即可。

但是问题来了,1e18这么大,处理平方数是1e9个显然不是可以接受的(通常视一秒1e7为复杂度的极限)
但是我们可以处理1e12范围内的平方数,如果给定的c可以整除那么直接就是yes的判定,否则的话考虑一下是什么情况

如果这个数是个平方数,但是过大,必然是某个因子乘上了这个平方数,使得无法判断,那么我们只需要剔除c的1e6范围内的所有质因子即可。剔除后再判断是否为平方数。

值得注意的是c为1需要特判,否则会WA27

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
const int N = 1e7+100;
const int te=1e9;
int super_sqrt(int x)
{int l=1,r=sqrt(x+100),ans=0;while(l<=r){int mid=(l+r)>>1;if(mid*mid<=x) ans=mid,l=mid+1;else r=mid-1;}return ans;
}
bool isPrime[N];
int Prime[N],cnt=0;
void GetPrime(int n)
{isPrime[1]=0;for(int i=2;i<=n;i++){if(isPrime[i]){Prime[++cnt]=i;}for(int j=1;j<=cnt&&i*Prime[j]<=n;j++){isPrime[i*Prime[j]]=0;if(i%Prime[j]==0){break;}}}
}
signed main()
{//cout<<998244353ll*998244353ll<<endl;cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);GetPrime(10000000);vector<int> p;for(int i=2;i*i<=100000000000000;i++)p.push_back(i*i);int t;for(cin>>t;t;t--){int n;cin>>n;if(n==1){cout<<"no\n";continue;}bool falg=false;for(auto x:p)if(n%x==0)falg=true;for(int i=1;i<=cnt;i++){int con=0;while(n%Prime[cnt]==0){n/=Prime[cnt];con++;}if(con>=2){falg=true;}}if(super_sqrt(n)*super_sqrt(n)==n){falg=true;}if(falg)cout<<"yes";elsecout<<"no";if(t!=1)cout<<endl;}return 0;
}

C. Inversion Graph

这个思维题还是很6的。

给定了一个排列,对于所有逆序对都连边,问你总共几个连通块。

思路:我们如果想用dsu去做的话,可能就需要对所有的连边都处理,但是最多可能会达到n*(n+1)/2条,所以复杂度不好实现。

从排列角度考虑,如果是正序情况,那么对于i来讲,i位置的前缀和就是i(i+1)/2,但是正序情况下就是n个连通块,也就是没有边相连,对于题目反向思考,如果截至到某个位置的前缀和是i(i+1)/2那么是不是就可以理解为多了一个连通块呢?显然是可以的。

#include <bits/stdc++.h>
using namespace std;
int T,n,a[100005],ans=0;
long long sum=0;
int main()
{cin>>T;for(int i=1;i<=T;i++){cin>>n;for(int i=1;i<=n;i++){cin>>a[i];sum+=a[i];//sum前缀和 if(sum==1LL*(1+i)*i/2)ans++;}cout<<ans<<endl;sum=0;ans=0;}return 0;
}

M - Function and Function
青岛的一个签到,大概是考了一个类似数字空洞的东西,其实可以发现递归到10层后基本就变为奇偶规律了。

#include <iostream>using namespace std;int a[10]={1,0,0,0,1,0,1,0,2,1};
int x,k;
pair<int,int> f(int x,int k)
{if(k==0||x==0){return make_pair(k,x);}int res=0;while(x){res+=a[x%10];x/=10;}f(res,k-1);
}
int main()
{cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);int t;for(cin>>t;t;t--){cin>>x>>k;auto n=f(x,k);if(n.first==0){cout<<n.second<<endl;}else{if(n.first%2){cout<<(n.second^1)<<endl;}else{cout<<n.second<<endl;}}}return 0;
}

J - Books
脑筋急转弯?

这个题需要注意的是,其实他价格为0的书我们只算其为应得数量,但是这种书和实际获得与钱数都没有什么关系,这样考虑。

#include<bits/stdc++.h>
#include<cstring>
#define ll long long
#define INF 1000000007
using namespace std;
int main()
{int T,n,m,x;scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);vector<int>v;for(int i=1; i<=n; ++i){scanf("%d",&x);if(x!=0)v.push_back(x);}int len=v.size();int zero=n-len;if(m<zero)puts("Impossible");else if(m==n)puts("Richman");else{m-=zero;ll sum=0;int t=INF;for(int i=0; i<len; ++i){if(i+1<=m)sum+=v[i];else t=min(t,v[i]);}sum+=t-1;printf("%lld\n",sum);}}return 0;
}

2020威海CCPC D,思维训练相关推荐

  1. 思维训练素材整理【初级中阶高阶辅导】

    提纲: 一直在想,我们该如何启发学生的思维,受一篇帖子1的启发,偶发感想,对高中数学中暂时能想到的素材做以整理,以飨读者. A.解方程中的由数到式,单项式到多项式 下面的表达式我们肯定经常见到,但是不 ...

  2. bigdecimal比较大小的方法_【初中数学思维训练】第7题——比较大小的常用方法...

    1 前言 老朋友可以略去前言,直奔第2部分--正文部分 本专题以新课程标准的初中数学知识为网络,以初中数学题的一题多解为主线,以解题后的反思为枢纽,试图全面系统地培养.训练中学生的发散思维能力.综合解 ...

  3. 【逻辑思维训练 二】系统思维训练

    有感于最近的技术分享,觉得思维训练越来越重要了,思维训练到位后,就可以用最高效的方式在最短的时间内取得最大的成果(符合自我高效获取高性价比价值的价值观定位),所以开启本系列.首先明确下自己的思维方式: ...

  4. php编程数学思维题,一年级数学:思维训练题(13套),打印每周一练,益智提升专用...

    一年级数学:思维训练题(13套),打印每周一练,益智提升专用! 众所周知,思维对于数学的学习是最为关键的,尤其是在小学阶段,需要趁早的培养孩子的逻辑思维能力.思维不是凭空想象,而是要依据手里的题目,能 ...

  5. Python 计算思维训练——字典与字符串练习

    Python 计算思维训练--字典与字符串练习(一) 基于表格创建字典 - 物理常数存储 #coding=utf-8 import re # 请在此处填写代码 #********** Begin ** ...

  6. Python 计算思维训练——输入和错误处理练习(二)

    第1关:读取用户输入的公式参数 任务描述 本关任务:编写一个能读取用户输入的公式参数,并计算公式结果的小程序. 相关知识 本关需要的知识请参考实训项目 "4-1 Python 计算思维训练- ...

  7. 真题训练1-算法思维训练

    真题训练1-算法思维训练 文章目录 真题训练1-算法思维训练 前言 项目环境 例题1:斐波那契数列 例题2:判断一个数组中是否存在某个数 参考 前言 第十四章 <通用解题的方法论> 我们讨 ...

  8. 〖产品思维训练白宝书 - 核心竞争力篇⑨〗- 产品经理核心竞争力解读之产品经理的规划能力对普通人的启发

    说明:该文属于 产品思维训练白宝书,目前阶段免费开放,购买任意白宝书体系化专栏可加入TFS-CLUB 私域社区. 福利:除了通过订阅"白宝书系列专栏"加入社区获取所有付费专栏的内容 ...

  9. 〖产品思维训练白宝书 - 基础学科素养篇①〗- 哪些学科知识更有利于我们掌握产品思维?

    说明:该文属于 产品思维训练白宝书专栏,目前阶段免费开放,购买任意白宝书体系化专栏可加入TFS-CLUB 私域社区. 福利:除了通过订阅"白宝书系列专栏"加入社区获取所有付费专栏的 ...

最新文章

  1. 初学Java——选择
  2. 太牛逼!一款软件几乎可以操作所有的数据库!
  3. Java基础10:全面解读Java异常
  4. Directory File Disk Searcher
  5. tf dense layer两种创建方式的对比和numpy实现
  6. C# 8.x 先睹为快
  7. Java程序员应在2018年学习的3种JVM语言
  8. oracle安装后新建数据库实例及配置
  9. js图表报表html5图表,介绍一个!非常简单非常方便!制作图表报表的js库 —— ichartjs 【详细操作】...
  10. 罗佳琪的第三次预备作业——虚拟机的安装及Linux的初步学习
  11. android SDK安装以及环境变量配置
  12. grafana设置Alert阈值和邮件报警
  13. spark架构设计编程模型 02
  14. 惠普136nw打印机清零_HP惠普打印机清零大全
  15. 自学-Linux-老男孩Linux77期-day7
  16. Echarts柱状图,如何基于数据进行百分比显示
  17. 爬虫headers参数
  18. GParted图形化工具对Linux磁盘分区扩容
  19. FME的ESRI Geodatabase (MDB)格式介绍(一)
  20. JS之使用Echarts画出人际关系图

热门文章

  1. 大数据相关技术及应用实践
  2. 2023牛客暑期多校训练营5-B Circle of Mistery
  3. 计算机病的防治措施,如何预防电脑病,电脑病的护理措施_疾病查询_39疾病百科...
  4. JavaScript烟花设计
  5. 微信小程序新闻(文章)发布系统前后台完整代码
  6. 从番茄花园想到的。。。。
  7. mongo 创建索引
  8. 黑儿浦密,为什么windows服务器运维这么难招?
  9. NUPT_移动应用开发 android简历app
  10. 文摘_安全经过广州火车站攻略(去广州的必看)