1001 水题,没有什么陷阱
1002
题意:给你N和K,问你能否将N拆成K个完全不同的正整数,并且满足其中K-1个数的和为完全平方数(i*i)。
看到这题,最开始的想法是,枚举完全平方数(n只有200000),则 b = n - i*i 就是那个没有被选进去的数,如果k-1个完全不同的正整数最小的和是 s = (k-1)*k/2(1,2,3,,,k-1的和)。如果b<k的话,说明b会和前面的数重合,所以我们只能将s+=k-b;(不让它们重合加的最小的值),当s<=i*i的话,就是合法的。程序如果写成这样的话,还有过不了一些数据的。
对于 7 3 这组数据,当我们在枚举时,我们枚举到 i*i==4,b = 3,s =3按照上面的程序会得到错误的解,原因是 我们在上面 少加了一个条件判断 (b==k&&s+1==a[i])
为什么会这样,拿上面那组数据 i*i==4,b = 3,s = 3,我们得到的序列实际上是 1 2 3,还有一个1需要加在前面两个数上,但不管加在谁身上都会出现两个相同的数。至于为什么只有这一个条件,就需要自己在纸上算下了。
贴下代码(头文件太长,去掉了):
int a[100000];
int main(){
int tot =0;
for(int i=1;i*i<=200000;i++){
a[tot++] = i*i;
}
int n,k;
while(~sf("%d%d",&n,&k)){
bool mark = false;
REP0(i,tot){
if(a[i]>=n) break;
int b = n - a[i];
int s = k*(k-1)/2;
if(b==k&&s+1==a[i]) continue;
if(b<k){
s+= k-b;
}
if(s>a[i]) continue;
mark = true;
break;
}
if(mark){
puts("YES");
}else{
puts("NO");
}
}
rt 0;
}
1003
题意:给你 N 和 K,问有多少个数对满足 gcd(N-A, N) * gcd(N - B, N) = N^K
一个数与别人的最大公约数最大是它本身(0除外),对于n==1来说,一定只有一种符合题意的解,对于其他数,所有的K>=3是为0的,当k==2,有唯一解(a==n,b==n),当k==n的时,枚举n的所有约数,现在问题变成 gcd(a,n) == b,且(a<n),这等价于求与小于n/b的与它互质的数的个数,这就可以用欧拉函数来解。
贴代码(省去头文件):
#define MOD 1000000007
int euler(int n) {
int ret = n;
for (int i = 2; i * i <= n; ++i) if (n % i == 0) {
ret = ret / i * (i - 1);
while (n % i == 0) n /= i;
}
if (n > 1) ret = ret / n * (n - 1);
return ret;
}
int main(){
int n,k;
while(~sf("%d%d",&n,&k)){
if(n==1){
puts("1"); continue;
}
if(k>=3){
puts("0"); continue;
}
if(k==2){
puts("1"); continue;
}
LL ans =0;
for(int i=1;i*i<=n;i++){
if(n%i==0){
int b = n/i;
LL tmp = ((LL)euler(i)*euler(b)%MOD);
ans = (ans+tmp)%MOD;
if(i*i!=n){
ans = (ans+tmp)%MOD;
}
}
}
pf("%I64d\n",ans);
}
rt 0;
}
分享到:
相关推荐
1. 给表达式加括号 2. 不同的二叉搜索树 1. 给表达式加括号 2. 不同的二叉搜索树
目录汇总前端后端测试汇总interview_internal_reference:2021 年最新总结大厂技术面试题目 & 题解50w字+的技术类校招面试题汇总
1. 给表达式加括号 2. 不同的二叉搜索树 1. 给表达式加括号 2. 不同的二叉搜索树
1. 给表达式加括号 2. 不同的二叉搜索树 1. 给表达式加括号 2. 不同的二叉搜索树
1. 给表达式加括号 2. 不同的二叉搜索树 1. 给表达式加括号 2. 不同的二叉搜索树
1. 数组中两个数的和为给定值 2. 判断数组是否含有重复元素 3. 最长和谐序列 4. 最长连续序列 1. 数组中两个数的和为给定值 2. 判断数组是否含有重
自己写的源码,希望各位看官指出不足之处,好交流进步
题目链接:B. Longest Palindrome 题目 Returning back to problem solving, Gildong is now studying about palindromes. He learned that a palindrome is a string that is the same as its reverse....
**COCI 2017/2018 Round #1, October 14th, 2017 翻译试卷 标程及题解** 本次竞赛是克罗地亚在线编程挑战赛(COCI)2017至2018赛季的第一轮比赛,于2017年10月14日举行。这份资源包含该比赛的试题翻译、官方解决...
题解 困难程度 标签分类 1 简单 数组、哈希表 7 简单 数字 9 简单 数字 13 简单 数字、字符串 14 简单 字符串 20 简单 栈、字符串 21 合并两个有序链表 JavaScript 简单 链表 26 简单 数组、双指针 27 简单 数组、双...
题解先设置一个字符组,将字符存入,设置一个大循环,对于每一次输入的字符组将其存入,依次和原字符组进行比较,最后统计相同即可。long long ans(long
【重庆八中周赛Round14周赛题解】 本次周赛中包含了三道题目,分别是T1修改序列,T2 Knuth表示法,以及T3魔力塔。以下是每道题目的详细解答: **T1 修改序列 (modify)** 这道题目要求修改一个序列,使得序列的和...
题解-面试真题记录一些暂时没找到原型的面试真题给定 n 个[0,n)区间内的数,统计每个数出现的次数,不使用额外空间给定 n 个[0,n)区间内的数,统计每个数
1.最大子段和 2.汉诺塔问题 3.汉诺塔3 4.汉诺塔2 5.简单的归并 6.字符串的全排列 7. 逆序对 8.二分查找
6. **动态内存管理**:内存分配(malloc, calloc, realloc)和释放(free)。 ### C语言高级特性 1. **文件操作**:文件读写函数如fopen, fread, fwrite, fclose等。 2. **预处理器指令**:宏定义(#define)、文件...
题解:6nlogn,先sort三个数组a,b,c, 六次枚举二分查找,再每次min找最小值,例如:先固定数组a,再在数组b,c中利用lower_bound找到第一个大于等于a[i]的数, #pragma GCC optimize(2) #include #define ll long long...
题解和标程.pdf题解和标程.pdf题解和标程.pdf题解和标程.pdf题解和标程.pdf题解和标程.pdf题解和标程.pdf题解和标程.pdf题解和标程.pdf题解和标程.pdf题解和标程.pdf题解和标程.pdf题解和标程.pdf题解和标程.pdf题解...
### 数理逻辑与集合论(第二版)精要与题解 #### 数理逻辑概览 数理逻辑作为数学的一个分支领域,主要研究数学证明的形式结构及其有效性问题。它不仅在数学理论研究中有广泛的应用,而且对计算机科学、人工智能、...
1.一个1*1的块和a[n-1]组合 2.一个2*1的块和a[n-2]组合 3.一个3*1的块和a[n-3]组合