标签: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,3…n−1 ”
“也就是说,你身后的那个平台就是 n-1n−1 号平台”
“你每次能够顺时针跳 i 个平台,i\in[1,n]i∈[1,n] ”
(每次的 ii 可以不一样!!)
“如果你能够经过所有平台(初始 00 号位置不算),那你就能逃出死亡之地了”
(这里指的是一开始的 00 号位置不算经过,需要再次经过 00 号位置)
“不过,这样太简单了,我会给你一些数 a_jaj?,表示你不能一次顺时针跳 a_jaj? 个平台”
“还有,你必须要用最少的跳跃次数完成我的任务”
“如果你不能满足我的上面两个要求,所有平台就会消失,你将会掉入下面的岩浆之中”
现在,Sunny 想知道他是否可能逃出这个地方
如果不行,输出 -1−1
如果可以,输出他最少所需的跳跃次数
因为 Sunny 觉得死亡之地实在是太有趣了,所以他决定多玩几次,多组数据!!!
第一行,一个正整数 TT,代表数据组数
接下来 2T2T 行,共 TT 组数据:
第 2*i-12∗i−1 行,两个整数 n,kn,k,kk 代表该组数据 a_jaj? 的个数
第 2*i2∗i 行,kk 个数,第 jj 个数表示 a_jaj?
TT 行,第 ii 行表示第 ii 组数据的输出
3 5 4 1 2 3 4 5 4 1 2 4 5 6 3 1 3 5
-1 5 -1
第一组数据:
Sunny 每次只能顺时针跳 5 个平台,易知不可能完成
第二组数据:
Sunny 每次只能顺时针跳 3 个平台,跳 5 次即可
k\leq n\leq 10^6k≤n≤106
0\leq k0≤k
1\leq n1≤n
保证 \sum{n_i}\leq 3*10^6∑ni?≤3∗106
a_i\leq nai?≤n,且互不相同
测试点 1:5\%,n=11:5%,n=1
测试点 2:5\%,n\leq52:5%,n≤5
测试点 3:10\%,n\leq153:10%,n≤15
测试点 4:15\%,n\leq3004:15%,n≤300
测试点 5:25\%,n\leq50005:25%,n≤5000
测试点 6:40\%,n\leq10^66:40%,n≤106
本题较为卡空间
请使用 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;
}
标签:scan 题目 ios 哈哈 ups mat inpu size -o
原文地址:https://www.cnblogs.com/xiongchongwen/p/11651325.html