码迷,mamicode.com
首页 > 其他好文 > 详细

P5582 【SWTR-01】Escape

时间:2019-10-11 00:28:48      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:scan   题目   ios   哈哈   ups   mat   inpu   size   -o   

题目背景

Sunny\ finds\ a\ mysterious\ place.Sunny finds a mysterious place.

But\ he\ is\ trapped\ inside.But he is trapped inside.

有一天,当 SunnySunny 闲逛的时候,发现了一个按钮

好奇心驱使他按下了这个按钮

突然间,天旋地转 \dots

已新增一组样例

题目描述

醒来之后,Sunny 发现自己站在一个奇怪的地方

这个地方有 n 个平台,形成了一个环

这时,Ethan 的声音响起:

“哈哈哈哈哈哈,恭喜你,你是第一个来到死亡之地的人”

“正如你所看到的,这个地方有 n 个平台,你现在站在 00 号平台上”

“剩余平台按顺时针编号 1,2,3\dots n-11,2,3n1 ”

“也就是说,你身后的那个平台就是 n-1n1 号平台”

“你每次能够顺时针跳 i 个平台,i\in[1,n]i[1,n] ”

(每次的 ii 可以不一样!!)

“如果你能够经过所有平台(初始 00 号位置不算),那你就能逃出死亡之地了”

(这里指的是一开始的 00 号位置不算经过,需要再次经过 00 号位置)

“不过,这样太简单了,我会给你一些数 a_jaj?,表示你不能一次顺时针跳 a_jaj? 个平台”

“还有,你必须要用最少的跳跃次数完成我的任务”

“如果你不能满足我的上面两个要求,所有平台就会消失,你将会掉入下面的岩浆之中”

现在,Sunny 想知道他是否可能逃出这个地方

如果不行,输出 -11

如果可以,输出他最少所需的跳跃次数

因为 Sunny 觉得死亡之地实在是太有趣了,所以他决定多玩几次,多组数据!!!

输入格式

第一行,一个正整数 TT,代表数据组数

接下来 2T2T 行,共 TT 组数据:

第 2*i-12i1 行,两个整数 n,kn,k,kk 代表该组数据 a_jaj? 的个数

第 2*i2i 行,kk 个数,第 jj 个数表示 a_jaj?

输出格式

TT 行,第 ii 行表示第 ii 组数据的输出

输入输出样例

输入 #1
3
5 4
1 2 3 4
5 4
1 2 4 5
6 3
1 3 5
输出 #1
-1
5
-1

说明/提示

样例说明

第一组数据:

Sunny 每次只能顺时针跳 5 个平台,易知不可能完成

第二组数据:

Sunny 每次只能顺时针跳 3 个平台,跳 5 次即可

数据范围

k\leq n\leq 10^6kn106

0\leq k0k

1\leq n1n

保证 \sum{n_i}\leq 3*10^6ni?3106

a_i\leq nai?n,且互不相同

测试点 1:5\%,n=11:5%,n=1

测试点 2:5\%,n\leq52:5%,n5

测试点 3:10\%,n\leq153:10%,n15

测试点 4:15\%,n\leq3004:15%,n300

测试点 5:25\%,n\leq50005:25%,n5000

测试点 6:40\%,n\leq10^66:40%,n106

本题较为卡空间

请使用 scanfscanf!

梦醒了……

 

 

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
using namespace std;
int t,a[1000610];
bool pd[1000610];
int read(){
    int a=0,b=1;
    char ch=getchar();
    while((ch<48||ch>57)&&ch!=‘-‘){
        ch=getchar();
    }
    if(ch==‘-‘){
        b=-1;
        ch=getchar();
    }
    while(ch<48||ch>57){
        ch=getchar();
    }
    while(ch>47&&ch<58){
        a=a*10+ch-48;
        ch=getchar();
    }
    return a*b;
}
int gcd(int a,int b){
	return !b?a:gcd(b,a%b);
}
int main(){
	t=read();
    for(int l=0;l<t;l++){
        int n,k,d;
        n=read(),k=read();
		d=n;
        for(int i=1;i<=k;i++){
        	a[i]=read();
			pd[a[i]]=1;
        }
        if((n==1)&&(k==1)){
        	printf("-1\n");
			pd[1]=0;
			continue;
		}
        for(int i=1;i<=n;i++){
            if(!pd[i]){
                d=gcd(d,i);
            }
        }
        if(d>1){
        	printf("-1\n");
		}
        else{
        	printf("%d\n",n);
		}
        for(int i=1;i<=k;i++){
            pd[a[i]]=0;
        }
    }
    return 0;
}

  

P5582 【SWTR-01】Escape

标签:scan   题目   ios   哈哈   ups   mat   inpu   size   -o   

原文地址:https://www.cnblogs.com/xiongchongwen/p/11651325.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!