第九届ECNU Coder K.计软联谊
题目链接: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
2
3 1
4 6 12
6 2
13 12 12 24 36 30
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.计软联谊的更多相关文章
- 第九届ECNU Coder A.足球锦标赛
题目链接:http://acm.ecnu.edu.cn/contest/16/problem/A/ 题目: A. 足球锦标赛 Time limit per test: 2.0 seconds Time ...
- 第九届ECNU Coder F.蚂蚁(栈)
题目链接:http://acm.ecnu.edu.cn/contest/16/problem/F/ 题目: F. 蚂蚁 Time limit per test: 0.5 seconds Time li ...
- 华东师范大学第十届ECNU Coder程序设计竞赛
华东师范大学第十届ECNU Coder程序设计竞赛 浮点数模运算 solution 转成整数然后取模. 时间复杂度:\(O(1)\) 数螃蟹 solution 找出公差出现次数最多的作为公差,然后找出 ...
- 关于git
一.Git基础教程 01.[入门练习]廖雪峰 git教程网:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8 ...
- VS工程里的文件都是啥?如何打包? 2015-03-04
打完补充:以下内容全部是我一家之言,只是愿意分享,内容如有不妥还请见谅. ====================================================== 刚才接收了一份代 ...
- Expert C Programming 阅读笔记(CH2)
P33 Bugs are by far the largest and most successful class of entity, with nearly a million known ...
- N天学习一个linux命令之rsync
用途 主要用于本地和远程主机同步文件 特性 1 使用增量传输算法(delta-transfer algorithm) 2 支持ssh,rsync协议 3 可以用于本地同步文件 4 本地和远程主机都需要 ...
- 最小生成树(MST)Prim算法和Kruskal算法
刚学完最小生成树,赶紧写写学习的心得(其实是怕我自己忘了) 最小生成树概念:一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边. 就是说 ...
- 知识图谱顶会论文(ACL-2022) PKGC:预训练模型是否有利于KGC?可靠的评估和合理的方法
PKGC:预训练模型是否有利于KGC?可靠的评估和合理的方法 论文地址:Do Pre-trained Models Benefit Knowledge Graph Completion? A Reli ...
随机推荐
- 关于 阿里云 的linux 安装 jdk和tomcat 中的问题(解压版的jdk和tomcat)
一安装jdk 1:首先要申请一个服务器 2:其次官网下载jdk(按你的linux版本下载(我的目前是64)) 3:就是上传jdk 4:在 usr 文件夹下创建 java 文件夹 5:把jdk上传到ja ...
- 从新向你学习javase(第一天)
1:阐述JDK和JRE之间区别 jdk(工具)>jre(运行环境)>jvm(虚拟机) 2: 能够使用常见的DOS命令 d:(进入D盘下),cd +路径(进入到当前路径),cd..(返回上一 ...
- react 样式的写法之一 ---》styled-components的基本使用
[react]---styled-components的基本使用---[WangQi] 一.官网地址 https://www.styled-components.com/ 二.styled-com ...
- 管理MySQL 从入门到出门
MySQL 中的数据库(Database)就像是一个容器,其中包含了各种对象.例如,数据表(Table).视图(View).存储过程(Stored Procedure)以及触发器(Trigger)等. ...
- 第一次Java学习总结
初学Java感觉还是蛮可以的,可是做起题目来还是不能得心应手,自己不懂得太多太多,还是需要不断努力去学啊!下面我就把这些天学到的知识点总结一下: 初学Java,我把目前所学知识点总结如下: 1.jav ...
- [Git] 012 rm 命令的补充
0. 前言 [Git] 007 三棵树以及向本地仓库加入第一个文件 的 "2.5" 有提及 git rm --cached <file> 1. 介绍 git rm &l ...
- CentOS6 破解登录密码
1.重启服务器,在倒数读秒的时候按任意键,就会出现如下界面 2.按e进入grub模式,选中kernel,然后按e进入内核编辑模式 3.进入内核编辑模式后,按空格+1回车(或按空格+single回车)退 ...
- free野指针问题
gdb backtrace内容如下: Program received signal SIGABRT, Aborted. (gdb) p cmd No symbol "cmd" i ...
- 第一个javascript脚本
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 26、前端知识点--利用webpack搭建脚手架一套完整流程
前言 我们的目标是利用webpack搭建一个基于react + react-router +dva + es6 + less + antd用于中后台开发的脚手架,同学们可能会说社区里那么多优秀的脚手架 ...