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. 如何使用数据库SCHEDULER来执行清归档脚本
  2. addEntriesFromDictionary用法
  3. ylb:表的结构的修改和基本约束
  4. linux下离线安装gcc
  5. 王者体验服服务器注册人数已满,王者荣耀体验服注册人数达到上限怎么回事?体验服测试最新申请方法...
  6. linux---基础01
  7. java解决限制访问指定url
  8. 中国互联网史是一部流氓史
  9. 机器学习与计算机视觉(slam技术)
  10. LeetCode—1.快速排序算法
  11. xp服务器下建立web站点,Windows XP配置WEB服务器教程(图文教程)
  12. apt user manul
  13. 交换机端口vlan tag/untag处理情况
  14. Android工具栏的使用
  15. java校验集装箱柜号是否正确
  16. java怎么注释多行注释_java的注释格式和多行注释和单行注释
  17. Gavin Wood的故事:神级黄皮书、出走以太坊、乱世成名与三代区块链
  18. 《Event Structure Representation: Between Verbs and Argument Structure Constructions》翻译(一)
  19. 山野村夫的总提纲!……还是羞于见人啦=////=
  20. 乖乖,很想读给你的诗--[人生]

热门文章

  1. 救生福 救生手表 救生手环 自救手环
  2. HTTP客户端错误状态码--4XX
  3. 天天用MySQL开发,你知道数据库能抗多大并发压力吗?
  4. 英语语法总结14(名词性从句:表语从句)
  5. 不要站在幸福里找幸福
  6. WASI探索(一) -- WASI简介与Wasmtime配置
  7. was控制台及节点启动
  8. 软件无线电zedboard+fmcomms2实现GPS信号模拟和接收
  9. STM32之DS18B20温度传感器
  10. windows如何利用计划任务自动关机?