P5582 SWTR-01Escape

Posted xiongchongwen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P5582 SWTR-01Escape相关的知识,希望对你有一定的参考价值。

题目背景

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,3dots n-11,2,3n1 ”

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

“你每次能够顺时针跳 i 个平台,iin[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 次即可

数据范围

kleq nleq 10^6kn106

0leq k0k

1leq n1n

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

a_ileq nai?n,且互不相同

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

测试点 2:5\%,nleq52:5%,n5

测试点 3:10\%,nleq153:10%,n15

测试点 4:15\%,nleq3004:15%,n300

测试点 5:25\%,nleq50005:25%,n5000

测试点 6:40\%,nleq10^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
");
			pd[1]=0;
			continue;
		}
        for(int i=1;i<=n;i++){
            if(!pd[i]){
                d=gcd(d,i);
            }
        }
        if(d>1){
        	printf("-1
");
		}
        else{
        	printf("%d
",n);
		}
        for(int i=1;i<=k;i++){
            pd[a[i]]=0;
        }
    }
    return 0;
}

  

以上是关于P5582 SWTR-01Escape的主要内容,如果未能解决你的问题,请参考以下文章

P5584 SWTR-01Sunny‘s Crystals(贪心线段树)

C语言项目贪吃蛇游戏(下)

即使我们正在清理输入 mysql_real_escape_string 的 SQL 注入漏洞代码

Python“string_escape”与“unicode_escape”

htmlspecialchars 和 mysql_real_escape_string 是不是可以防止我的 PHP 代码被注入?

如何使用 ANSI Escape 代码在控制台上输出彩色文本