k.计软联谊 「游族杯」上海市高校程序设计邀请赛(数论)
2017-05-31 22:42
260 查看
K. 计软联谊
Time limit per test: 7.0 secondsMemory 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
input2 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
请注意输入输出上的优化!想法:
首先找出1到10^6的因数,最好用<vector>保存
该步骤的代码:
void init()//找每个数的因数
{
for(int i = 1;i<=L;i++)
{
for(int j = i;j<=L;j+=i)
{
P[j].push_back(i);
}
}
}
再者我们要用欧几里得找出最大公约数
这样我们很容易从<vector>中找出 a,b 第 k 大的公约数
代码:
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
const int maxn = 1e5+10;
const int L = 1e6;
int m[maxn];
vector <int > P[L+1];
int kase = 1;
void init()//找每个数的因数
{
for(int i = 1;i<=L;i++)
{
for(int j = i;j<=L;j+=i)
{
P[j].push_back(i);
}
}
}
int gcd(int a, int b)//找a和b的最大公约数
{
return b==0?a:gcd(b, a%b);
}
void solve()
{
int n, k;
scanf("%d%d", &n, &k);
for(int i = 1;i<=n;i++)
scanf("%d", &m[i]);
printf("Case %d:", kase++);
for(int i = 1;i<n;i++)
{
int x = gcd(m[i], m[i+1]);//两个相邻同学的属性值的最大公约数
int len = P[x].size();
if(len-k>=0)
{
printf(" %d", P[x][len-k]);
}
else
printf(" -1");
}
printf("\n");
}
int main()
{
init();
int T;
scanf("%d", &T);
while(T--)
{
solve();
}
return 0;
}
相关文章推荐
- 「游族杯」上海市高校程序设计邀请赛暨华东师范大学第九届 ECNU Coder 程序设计竞赛 A. 足球锦标赛
- 「游族杯」上海市高校程序设计邀请赛暨华东师范大学第九届 ECNU Coder 程序设计竞赛 (重现)
- 「游族杯」上海市高校程序设计邀请赛暨华东师范大学第九届 ECNU Coder 程序设计竞赛 E.章鱼哥没有女朋友
- 「游族杯」上海市高校程序设计邀请赛暨华东师范大学第九届 ECNU Coder 程序设计竞赛 (重现) Problem D. 萝莉理论计算机科学家
- 「游族杯」上海市高校程序设计邀请赛暨华东师范大学第九届 ECNU Coder 程序设计竞赛
- 2017上海市高校程序设计邀请赛_K
- 2017上海市高校程序设计邀请赛_L
- 2017上海市高校程序设计邀请赛_E
- 游族杯」上海市高校程序设计邀请赛暨华东师范大学第九届 ECNU Coder 程序设计竞赛 (重现)F. 蚂蚁
- 上海市高校程序设计邀请赛暨华东师范大学第九届 ECNU Coder 程序设计竞赛 C. 神奇怪兽在哪里
- 2017上海市高校程序设计邀请赛_F
- 2017上海市高校程序设计邀请赛_G
- 2017上海市高校程序设计邀请赛_A
- 2017上海市高校程序设计邀请赛_I
- 2017上海市高校程序设计邀请赛_C
- 大学生程序设计竞赛暨西南地区高校邀请赛 赛后总结
- 华南理工大学第二届“超级码力”程序设计竞赛暨广东省高校邀请赛
- 2017广东工业大学程序设计竞赛决赛 Problem H: tmk买礼物(数论)
- 关于数论的知识――基于程序设计
- SHU-“盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛-I-丢史蒂芬妮