题目链接:http://acm.ecnu.edu.cn/contest/16/problem/K/

题目:

K. 计软联谊

Time limit per test: 7.0 seconds

Time limit all tests: 7.0 seconds

Memory limit: 512 megabytes

Accept / Submit: 19 / 398

在计算机和软件专业的联谊会上,计算机和软件的同学相间着排成一列。现在要计算相邻两个同学的友谊度。

友谊度 friend(a,b) 是这么计算的:令 a, b 两个整数分别是两个同学的属性,两个同学的友谊度取决于 a,b 第 k 大的公约数。如果不存在,就说明这两个同学之间完全没有友谊,友谊度为 −1。

Input

第一行是数据组数 T (1≤T≤60)。

对于每组数据:
第一行:首先是学生的数量 n (1≤n≤105),约定的常数 k (1≤k≤106)。
第二行:n 个整数,依次表示这些学生的属性值:m1,m2,…,mn (1≤mi≤106)。

Output

对于每组数据输出一行,以 Case x: 开头(x 表示数据编号,从 1 开始),后面是 n−1 个整数,分别是 friend(m1,m2),friend(m2,m3),…,friend(mn−1,mn),整数和整数之间用空格隔开。

Examples

input
2
3 1
4 6 12
6 2
13 12 12 24 36 30
output
Case 1: 2 6
Case 2: -1 6 6 6 3

Note

请注意输入输出上的优化!

题解:

  就每两个数gcd,求出最大公约数。然后求第k大的公约数。

  一开始理解错,以为第2大的公约数是最大公约数除以2,第3大则是除以4。dalao说是错的。

  第k大的公约数是最大公约数的约数(不一定是除以2,可以除以3什么的)。

  就先用筛法将1~1e6的每个数的约数筛出来。

  

 void init() {
for(int i = ;i<=L;i++){
for(int j = i;j<=L;j+=i){
P[j].push_back(i);
}
}
}

筛法

  详细代码:

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <sstream>
#include <algorithm>
using namespace std;
#define pb push_back
#define mp make_pair
#define ms(a, b) memset((a), (b), sizeof(a))
#define eps 0.0000001
typedef long long LL;
typedef unsigned long long ULL;
const int inf = 0x3f3f3f3f;
const LL INF = 0x7fffffff;
const int maxn = 1e5+;
const int L = 1e6;
const int mod = 1e9+;
int m[maxn];
vector <int > P[L+];
int kase = ;
void init() {
for(int i = ;i<=L;i++){
for(int j = i;j<=L;j+=i){
P[j].push_back(i);
}
}
}
int gcd(int a, int b){
return b==?a:gcd(b, a%b);
}
void solve() {
int n, k;
scanf("%d%d", &n, &k);
for(int i = ;i<=n;i++)
scanf("%d", &m[i]);
printf("Case %d:", kase++);
for(int i = ;i<n;i++){
int x = gcd(m[i], m[i+]);
int len = P[x].size();
if(len-k>=){
printf(" %d", P[x][len-k]);
}
else
printf(" -1");
}
printf("\n");
}
int main() {
#ifdef LOCAL
freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
#endif // LOCAL
init();
int T;
scanf("%d", &T);
while(T--){
solve();
}
return ;
}

你努力的时候,比你厉害的人也在努力。

第九届ECNU Coder K.计软联谊的更多相关文章

  1. 第九届ECNU Coder A.足球锦标赛

    题目链接:http://acm.ecnu.edu.cn/contest/16/problem/A/ 题目: A. 足球锦标赛 Time limit per test: 2.0 seconds Time ...

  2. 第九届ECNU Coder F.蚂蚁(栈)

    题目链接:http://acm.ecnu.edu.cn/contest/16/problem/F/ 题目: F. 蚂蚁 Time limit per test: 0.5 seconds Time li ...

  3. 华东师范大学第十届ECNU Coder程序设计竞赛

    华东师范大学第十届ECNU Coder程序设计竞赛 浮点数模运算 solution 转成整数然后取模. 时间复杂度:\(O(1)\) 数螃蟹 solution 找出公差出现次数最多的作为公差,然后找出 ...

  4. 关于git

    一.Git基础教程  01.[入门练习]廖雪峰 git教程网:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8 ...

  5. VS工程里的文件都是啥?如何打包? 2015-03-04

    打完补充:以下内容全部是我一家之言,只是愿意分享,内容如有不妥还请见谅. ====================================================== 刚才接收了一份代 ...

  6. Expert C Programming 阅读笔记(CH2)

    P33    Bugs are by far the largest and most successful class of entity, with nearly a million known ...

  7. N天学习一个linux命令之rsync

    用途 主要用于本地和远程主机同步文件 特性 1 使用增量传输算法(delta-transfer algorithm) 2 支持ssh,rsync协议 3 可以用于本地同步文件 4 本地和远程主机都需要 ...

  8. 最小生成树(MST)Prim算法和Kruskal算法

    刚学完最小生成树,赶紧写写学习的心得(其实是怕我自己忘了) 最小生成树概念:一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边. 就是说 ...

  9. 知识图谱顶会论文(ACL-2022) PKGC:预训练模型是否有利于KGC?可靠的评估和合理的方法

    PKGC:预训练模型是否有利于KGC?可靠的评估和合理的方法 论文地址:Do Pre-trained Models Benefit Knowledge Graph Completion? A Reli ...

随机推荐

  1. LeetCode——141 设计链表

    题目: 简单说下思路: 用两个指针,一个跑得快,一个跑得慢(例如一个每次前进两步,一个前进一步),这样只要快指针不会撞上NULL(如果遇到了NULL的情况那么必然不存在环),快指针肯定会和慢指针碰面( ...

  2. Java基础/利用fastjson反序列化json为对象和对象数组

    利用fastjson反序列化json为对象和对象数组 利用 fastjosn 将 .json文件 反序列化为 java.class 和 java.util.List fastjson 是一个性能很好的 ...

  3. 精灵图和base64如何选择

    Css Sprites: 介绍: Css Sprites(雪碧图或css精灵),是网页图片处理的一种方式,它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问该页面时,载入的图 ...

  4. Windows + Ubuntu 16.04 双系统安装详细教程(转)

    转载自:http://www.cnblogs.com/Duane/p/6776302.html 前言:本篇文章是对之前文章的更新,更新的主内容是把原来用手机拍摄的图片换成了虚拟机的截图,以及对磁盘划分 ...

  5. Git-第五篇廖雪峰Git教程学习笔记(4)分支

    1.一开始,只有一个主分支(master),HEAD指向Master,而Master指向主分支.现在我们创建dev分支. lfy@lfy-PC MINGW64 /c/fyliu/lfyTemp/git ...

  6. Appium+Python之PO模型(Page object Model)

    思考:我们进行自动化测试时,如果把代码都写在一个脚本中,代码的可读性会变差,且后期代码维护也麻烦,最好的想法就是测试对象和测试用例可以分离,可以很快定位问题,代码可读性高,也比较容易理解.这里推荐大家 ...

  7. P3191 [HNOI2007]紧急疏散EVACUATE

    传送门 这一题很容易想到网络流 一开始傻逼地模拟整个图每一个时间的情况,显然会爆炸 发现我们只要考虑起点到门之间的距离,不用每一步只走一格 所以直接 $BFS$ 预处理距离然后二分答案,网络流判断即可 ...

  8. html表格单元格添加斜下框线的方法

    一.分隔单元格的方法 1.用“transform: rotate(-55deg);”把一条水平线旋转一定角度就成斜线了 2.利用以下命令调整分割线位置等. :after :before transfo ...

  9. k3 cloud中获取自己开发的单据

    设置基础资料(业务对象).系统自带用单据

  10. FFmpeg从入门到出家(FLV文件结构解析)

    FLV(FLASH VIDEO),是一种常用的文件封装格式,目前国内外大部分视频分享网站都是采用的这种格式.其标准定义为<Adobe Flash Video File Format Specif ...