HDOJ HDU 2053 Switch Game ACM 2053 IN HDU

MiYu原创, 转帖请注明 : 转载自 ______________白白の屋

题目地址:
         http://acm.hdu.edu.cn/showproblem.php?pid=2053
题目描述:
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 .

题目分析:
毫无疑问 , 从后面的 Consider the second test case 可以看出, 这是一道模拟题, 根据题意直接模拟即可!

代码如下:
MiYu原创, 转帖请注明 : 转载自 ______________白白の屋

#include 
< iostream >
#include 
< string .h >
using   namespace  std;
 
int  arr[ 100001 ];
 
int  main()
{
    
int  n;
    
while (scanf( " %d " & n)  !=  EOF)
    {
        memset(arr, 
0 sizeof (arr));
        
for ( int  i = 1 ; i <= n;  ++ i)
            
for ( int  j = 1 ; j <= n && j * i <= n;  ++ j)
                arr[j
* i]  =   ! arr[j * i];
        printf(
" %d\n " , arr[n]);
    }
    
return   0 ;
}

但是这样非常耗时,  有没更简单的方法? 当然有!  在草稿纸上模拟后得出: 只要是平方数就是 "1" ,否则为"0" , 所以
直接哈希,0MS过.

代码如下:
MiYu原创, 转帖请注明 : 转载自 ______________白白の屋

#include 
< iostream >
using   namespace  std;
int  F[ 100001 =  {  1 1  };
int  main ()
{
    
for  (  int  i  =   2 ; i  *  i  <=   100000  ;  ++  i )
    {
          F[ i 
*  i ]  =   1 ;
    }
    
int  N;
    
while  ( cin  >>  N )
    {
          puts ( F[N] 
?   " 1 "  :  " 0 "  ); 
    }
    
return   0
}

转载于:https://www.cnblogs.com/MiYu/archive/2010/08/18/1802461.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值