HDU 2053 Switch Game(开灯问题,唯一分解定理)

Switch Game

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 15011    Accepted Submission(s): 9160

Problem Description

There are many lamps in a line. All of them are off at first. A series of operations are carried out on these lamps. On the i-th operation, the lamps whose numbers are the multiple of i change the condition ( on to off and off to on ).

Input

Each test case contains only a number n ( 0< n<= 10^5) in a line.

Output

Output the condition of the n-th lamp after infinity operations ( 0 - off, 1 - on ).

Sample Input

1
5

Sample Output

1
0

Hint

hint

Consider the second test case:

The initial condition	   : 0 0 0 0 0 …
After the first operation  : 1 1 1 1 1 …
After the second operation : 1 0 1 0 1 …
After the third operation  : 1 0 0 0 1 …
After the fourth operation : 1 0 0 1 1 …
After the fifth operation  : 1 0 0 1 0 …

The later operations cannot change the condition of the fifth lamp any more. So the answer is 0.

Author

LL

Source

校庆杯Warm Up

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2053

题意:有n盏灯,原来全部是关闭的,经过n次操作,问最后一盏灯的状态.每次次数是灯的编号是,拨动灯的开关,(有可能打开或者关闭).

思路:首先想到的是模拟,但是超时了,后来发现,n的状态由n的约数个数决定,当约数个数为偶数是,n的状态不变(关闭),当为奇数的时候发生改变(打开).所以只要统计约数的个数便可解决问题.

小发现:当约数个数为奇数的时候,这个数一定为平方数!所以此问题就转变为判断一个数是不是平方数.

原理:

30的约数为: (1,30), (2,15), (3,10)

36的约数为: (1,36), (2,18), (3,12), (4,9), (6)

一个数的约数总是成对的出现,当为平方数的时候有两个约数相同,就只算一个.

PS:判断平方数的方法速度更快!

AC代码1

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    int n;
    while(cin>>n)
    {
        double x=sqrt(n*1.0);
        cout<<(x==int(x))<<endl;

    }
    return 0;
}

AC代码2:

#include <iostream>
using namespace std;
int main()
{
    int n;
    while(cin>>n)
    {
        int sum=0;
        for(int i=1; i<=n; i++)
        {
            if(n%i==0)
                sum++;
        }

        cout<<sum%2<<endl;

    }
    return 0;
}
时间: 2024-10-11 17:03:56

HDU 2053 Switch Game(开灯问题,唯一分解定理)的相关文章

HDU 2053 Switch Game(开灯问题,完全平方数)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2053 题目大意:灯开始是关着的,有n盏灯,i从1数到n每当灯的序号是i的倍数的时候就对灯进行一次操作(开->关,关->开),求最后第n盏灯是关着还是开着. 解题思路:直接对第n盏灯模拟也可以,但是有规律更好不是吗~.其实就是判断n的约束奇偶性,奇数就开着,偶数就关着. 当一个数不是完全平方数:如18约数为:(3,6),(2,19),(1,15)约数个数总会是偶数,因为每个约数都有一个对应的不同的约

hdu 2053 Switch Game 水题一枚,鉴定完毕

Switch Game Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 10200    Accepted Submission(s): 6175 Problem Description There are many lamps in a line. All of them are off at first. A series of op

HDU 2053 Switch Game

Switch Game 原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2053Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Problem Description There are many lamps in a line. All of them are off at first. A series of operations

HDU 2053 Switch Game(数学题)

Switch Game Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 15008    Accepted Submission(s): 9158 Problem Description There are many lamps in a line. All of them are off at first. A series of o

HDU 1218 THE DRUNK JAILER【类开灯问题】

THE DRUNK JAILER Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 27268   Accepted: 16933 Description A certain prison contains a long hall of n cells, each right next to each other. Each cell has a prisoner in it, and each cell is locked

杭电 acm 2053 ( Switch Game )

这题思路: 一开始有n盏灯,且全部为关闭状态,都记为 0  就是  The initial condition :      0 0 0 0 0 … 然后之后进行i操作就是对这些灯以是否能被i整除,进行改变状态,如将 0 改为 1 或 将 1 改为 0 正如提醒里的 After the first operation :  1 1 1 1 1 … After the second operation : 1 0 1 0 1 … After the third operation :  1 0 0

HDU 3404 Switch lights(Nim积)题解

题意:在一个二维平面中,有n个灯亮着并告诉你坐标,每回合需要找到一个矩形,这个矩形xy坐标最大的那个角落的点必须是亮着的灯,然后我们把四个角落的灯状态反转,不能操作为败 思路:二维Nim积,看不懂啊,只能套模板了 参考:HDU 3404 Switch lights (NIM 积) 代码: #include<set> #include<map> #include<stack> #include<cmath> #include<queue> #inc

9509 开灯(dfs)

9509 开灯 时间限制:1000MS  内存限制:65535K提交次数:0 通过次数:0 题型: 编程题   语言: G++;GCC Description 有16的开关分别控制16盏灯,开关排列成4*4的矩形,这些开关有这样的关系: 你改变其中一个开关的状态,与其同行和同列的开关的状态也跟着改变.先给出一个这些开关的初始状态,要求将所有的开关都打开,让所有的灯都亮起来,要求按下开关的次数最少. 输入格式 第一行输入一个整数t,表示有多少个case,每个case之间有一空行,每个case输入一

9509 开灯

9509 开灯 时间限制:1000MS  内存限制:65535K提交次数:0 通过次数:0 题型: 编程题   语言: G++;GCC Description 有16的开关分别控制16盏灯,开关排列成4*4的矩形,这些开关有这样的关系: 你改变其中一个开关的状态,与其同行和同列的开关的状态也跟着改变.先给出一个这些开关的初始状态,要求将所有的开关都打开,让所有的灯都亮起来,要求按下开关的次数最少. 输入格式 第一行输入一个整数t,表示有多少个case,每个case之间有一空行,每个case输入一