题目链接:http://acm.ayit.edu.cn/contest/12/problem/37
时间限制:1s 内存限制:256M
题目描述
今年就这么结束了, zdw感到十分失望蓝桥杯写错签到题, cf rating狂掉, 最后区域赛打铜, 还突然变成JBer了失落的zdw准备睡觉(真咸鱼), 他想关灯, 然而发现开关坏了zdw愤怒地敲击着开关, 然后发现一个很神奇的事情: 如果灯之前已经关过了x次, 那么下一次打开它以后再关上它需要使用x+1次开关 具体情况请参考样例. 一开始灯是开着的。
输入描述
第一行一个整数T
表示数据组数接下来T行每行一个整数n表示zdw使用开关的次数
输出描述
共T行, 每行一个字符串"ON"或"OFF"表示目前灯是开着还是关着的具体见样例
样例输入
9
0
1
2
3
4
5
6
7
8
样例输出
ON
OFF
ON
ON
OFF
ON
ON
ON
OFF
样例描述
0次时就是初始状态, 显然灯是开着的1次时之前灯没有关上过, 所以按1次后灯就关上了, 是OFF
2次时灯重新被打开了
3-4次时因为灯之前已经关上1次了, 所以需要按2下来让灯再次关上(按完第4下后关上了)
5次时灯又重新被打开了
6-8次时因为灯之前已经关上2次了, 所以需要按3下来让灯再次关上(按完第8下后关上了)
数据范围
T <= 100000
n <= 1018
子任务1:(10分)
n<= 108
子任务2:(20分)
无其他限制
分析:
分析可得灯在1 4 8 13 19。。。。这样的数字是关闭的。
我们要做的就是分析这些数字有什么特征。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
2 * 4+4= 3 * 4;
2 * 8+4= 4 * 5;
2 * 13+4= 5 * 6;
代码:
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
LL n;
scanf("%lld",&n);
LL mod=sqrt(2*n+4);
if(mod*(mod+1)==2*n+4)
printf("OFF\n");
else
printf("ON\n");
}
return 0;
}
需要好好调控,整理一下自己