FJNU.1908
Description
In summer holiday of Grade 1,honghu was trainning at ZOJ too. There was one problem let him remember time and time again. Now it comes :)
小丁的老师给他布置了一个试验,有n个灯,编号为1,2,....n,对这n个灯做n次变化,第i(1<=i<=N)次使编号是i倍数的灯的状态发生改变(即从暗到亮或者从亮到暗),要求记录下最后灯的状态是暗的个数t.已知每一个灯初试状态都是暗的.由于小丁比较粗心,所以要求你对他给出的n和t做出判断,看是否正确.
Input
一个正整数T,表示数据的组数,接下去的T行,每一行有两个整数,表示n和t,其中2<=n<=500000,0<=t<=100000
Output
如果正确,输出YES,否则输出NO
Sample Input
2
4 2
10 6
Sample Output
YES
NO
My Program
#include
<
iostream
>
#include < math.h >
using namespace std;
int SQR( int n)
... {
double i=sqrt((double)n);
int x=(int)i;
if(i==x*1.0)
return 1;
else
return 0;
}
int main()
... {
int T,n[1000],t[1000],i,j,x;
cin>>T;
for(i=0;i<T;i++)
cin>>n[i]>>t[i];
for(i=0;i<T;i++)
...{
x=0;
for(j=1;j<=n[i];j++)
if(SQR(j))
x++;
if(n[i]-x==t[i])
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
#include < math.h >
using namespace std;
int SQR( int n)
... {
double i=sqrt((double)n);
int x=(int)i;
if(i==x*1.0)
return 1;
else
return 0;
}
int main()
... {
int T,n[1000],t[1000],i,j,x;
cin>>T;
for(i=0;i<T;i++)
cin>>n[i]>>t[i];
for(i=0;i<T;i++)
...{
x=0;
for(j=1;j<=n[i];j++)
if(SQR(j))
x++;
if(n[i]-x==t[i])
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
YOYO's Note:
不知道有什么好方法,
本来模拟了一遍,TLE了。
后来有一天没事干在机房,随便列了下数据,
发现,经过N次操作后实际上亮着的灯数就是从1~N的完全平方数个数。
AC,但是还是0.3s……