万卷网 > 题目详情
题型:编程题

割圆

本题将实现一个简化版的“割圆”游戏。成功点亮所有灯时,联结第一个和最后一个灯称之为“割线”。

n盏灯环形分布,顺序编号为1到n。灯的初始状态为关闭不亮。假设n为7,则第1号灯与第2、7号灯相邻,第2号灯与第1、3号灯相邻,以此类推。

灯的点亮规则如下:

1、输入m个数,每个数为某个灯的编号,可能重复或只是部分编号;

2、m个数中的第1个数所对应的灯,默认点亮;

3、 如果输入数对应灯的左侧或右侧已被点亮,则点亮自身。否则啥也不做;

4、如果所有的灯都已被点亮,则程序结束,m个数中尚未被处理的数将不再处理;

5、输出第1次和最后一次点亮灯的编号;

6、如果m个数处理完毕尚未点亮所有灯,则输出No。

时间限制:1000

内存限制:131072

输入

第一行2个整数n,m,保证3<=n<=1000,1<=m<=10000。 第二行m个数,每个数都在1到n之间,表示输入序列。

输出

如果完成了“割圆”,则输出两个整数,之间用一个空格隔开,否则输出No。


样例输入

7 10
2 3 1 7 5 6 5 4 4 2

样例输出

2 4

提示

第1个数2,直接被点亮; 第2个数3,3与已亮的2相邻,被点亮; 第3个数1,1与已亮的2相邻,被点亮; 第4个数7,7与已亮的1相邻,被点亮; 第5个数5,5与4和6相邻,但4和6都没亮,什么都不做; 第6个数6,6与已亮的7相邻,被点亮; 第7个数5,5与已亮的6相邻,被点亮; 第8个数4,4与已亮的5相邻,被点亮; 此时,所有的数都被点亮,第1个点亮的是2,最后点亮的是4。

更新时间:2023-04-13 19:49:41 |
【知识点】 电子学会C/C++二级

相似题推荐

单选题

执行以下C++代码,输入`65`后,输出结果是?( ) 

int grade; 
cin >> grade;
 if(grade >= 90) 
     cout << "优秀"; 
else if(grade >= 70) 
    cout << "良好"; 
else if(grade >= 60) 
    cout << "及格"; 
else 
    cout << "不及格";
A.

优秀

B.

良好

C.

及格

D.

不及格

2026-07-10
判断题

C++中,数组的长度可以在定义后随时修改。( )

A.正确 B.错误
2026-07-10
单选题

以下C++数组定义中,正确的是?( )

A.

整数 arr[4] = {1,2,3,4,5};

B.

整数 arr[] = {5,4,3,2,1};

C.

int n=-5;内通 arr[n];

D.

整数 arr[5] = ;

2026-07-10
编程题

查找特定值

2026-07-10
判断题

C++中,将double类型赋值给int类型变量时,会自动进行类型转换,不会丢失数据。( )

A.正确 B.错误
2026-07-10
公众号
客服 反馈
顶部