hdu 2051 Switch Game(模擬/數論)
阿新 • • 發佈:2019-02-16
題目意思:
給你n個燈,剛開始全滅,問經過無窮多次操作後,求第n個燈的狀態。
題目分析:
見程式碼註釋。
AC程式碼:
/** *@xiaoran *應該是數論問題,先模擬看看(過了),現在來看這道題 *題意:給你n個燈,剛開始全滅,問經過無窮多次操作後,第n個燈狀態 *對於第i次操作,改變所有i的倍數的狀態 *發現當操作到n+1次之後肯定不會對n有影響,此題變為操作n次之後的n的狀態 *下面分析:剛開始n的狀態為0,如果對第n個燈操作了偶數次,其狀態還是0, *操作奇數次變為1,現在來分析對於n:如果i是n的約數,就會改變n的狀態,但是 *j=n/i也是n的約數,還會把n的狀態改變回來,到這裡可以發現當i=n/i的時候,才會 *對n的狀態發生影響,剛開始n狀態為0,如果n是個完全平方數,則會變為1. */ #include<iostream> #include<cstdio> #include<map> #include<cstring> #include<string> #include<algorithm> #include<queue> #include<vector> #include<stack> #include<cstdlib> #include<cctype> #include<cmath> #define LL long long using namespace std; int a[100005]; int main() { int n; while(cin>>n){ int k=(int) (sqrt(n)+0.5); k*k==n?printf("1\n"):printf("0\n"); /**模擬 memset(a,1,sizeof(a)); for(int i=2;i<=n;i++){ for(int j=i;j<=n;j+=i){ a[j]=!a[j]; } } if(n==1) printf("1\n"); else printf("%d\n",a[n]); **/ } return 0; }