http://acm.split.hdu.edu.cn/showproblem.php?pid=6130
题意:求Kolakoski的第n项。
题解:其实多写几个就可以看出Kolakoski的定义了,然后递推打表即可(双指针)。
代码:
#include<bits/stdc++.h>
#define debug cout<<"aaa"<<endl
#define d(a) cout<<a<<endl
#define mem(a,b) memset(a,b,sizeof(a))
#define LL long long
#define lson l,mid,root<<1
#define rson mid+1,r,root<<1|1
#define MIN_INT (-2147483647-1)
#define MAX_INT 2147483647
#define MAX_LL 9223372036854775807i64
#define MIN_LL (-9223372036854775807i64-1)
using namespace std;
const int N = 10000000 + 5;
const int mod = 1000000000 + 7;
const double eps = 1e-8;
int a[N],tot;
void init(){
a[1]=0,a[2]=1,a[3]=1;
for(int i=3,j=4;j<N;i++){
if(a[i]==1){
a[j]=a[j+1]=!a[j-1];
j+=2;
}
else{
a[j]=!a[j-1];
j++;
}
}
}
int main(){
int t,n;
init();
scanf("%d",&t);
while(t--){
scanf("%d",&n);
printf("%d\n",a[n]+1);
}
return 0;
}