【数学】省选四校联考 D1T1考考试

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34454069/article/details/88756270

在这里插入图片描述


分析:

显然,一个萌的数,必然满足其所有的后缀都是萌的数。

所以,我们可以通过不停地在最高位加值来得到新的萌数。

还有一个结论:
设这个萌的数表示为: A k A k 1 A k 2 A 0 A_kA_{k-1}A_{k-2}……A_0
则其必然满足:
A k ( 1 0 k 2 k ) + A k 1 ( 1 0 k 1 2 k 1 ) + + A 0 ( 1 0 0 2 0 ) = 0   ( m o d   2 k + 1 ) A_k*(10^k-2^k)+A_{k-1}*(10^{k-1}-2^{k-1})+……+A_0*(10^0-2^0)=0\ (mod\ 2^{k+1})

A k 2 k ( 5 k 1 ) + A k 1 2 k 1 ( 5 k 1 1 ) + A 0 2 0 ( 5 0 1 ) = 0 ( m o d   2 k + 1 ) A_k*2^k*(5^k-1)+A_{k-1}*2^{k-1}*(5^{k-1}-1)……+A_0*2^0*(5^0-1)=0(mod\ 2^{k+1})
5 k 1 5^k-1 必然含有4这个因数 ( 5 k 1 = ( 5 0 + 5 1 + 5 2 + + 5 k 1 ) 4 ) (5^k-1=(5^0+5^1+5^2+……+5^{k-1})*4)

所以 A k 2 k + 2 ( ) + A k 1 2 k + 1 ( ) + = 0 ( m o d   2 k + 1 ) A_k*2^{k+2}*(……)+A_{k-1}*2^{k+1}*(……)+……=0(mod\ 2^{k+1})

换言之,最高位对其合法性不造成影响

因此,不需要先加入再判断,直接判断当前合不合法,然后最高位分别加0或1即可。

关于如何判断合不合法。。。直接高精暴力取模即可。。。。(因为能询问到的最大的萌数也不超过200位。。。我怎么知道这个结论啊喂)

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#define SF scanf
#define PF printf
#define MAXN 100010
using namespace std;
struct BigInt{
	char a[MAXN];
	short int len;
	void add(int pos){
		a[pos]=1;
		len=pos;
	}
	void div2(){
		int les=0;
		for(int i=len;i>=0;i--){
			les=les*10+a[i];
			a[i]=les/2;
			les%=2;
		}
		while(a[len]==0)
			len--;
	}
	void Print(){
		for(int i=len;i>=0;i--)
			PF("%d",a[i]);	
	}
}tmp;
bool Modulo2k(BigInt a,int k){
	while(k){
		a.div2();
		k--;	
	}
	return a.a[0]&1;
}
vector<BigInt> now,add1,add0;
int main(){
	freopen("quiz.in","r",stdin);
	freopen("quiz.out","w",stdout);
	int n;
	SF("%d",&n);
	now.push_back(tmp);
	int len=0;
	while(1){
		for(int i=0;i<now.size();i++)
			if(Modulo2k(now[i],len)==0){
				tmp=now[i];
				add0.push_back(tmp);
				tmp.add(len);
				add1.push_back(tmp);
				n--;
				if(n==0){
					tmp.Print();
					return 0;
				}
			}
		now.clear();
		for(int i=0;i<add0.size();i++)
			now.push_back(add0[i]);
		for(int i=0;i<add1.size();i++)
			now.push_back(add1[i]);
		add0.clear();
		add1.clear();
		len++;
	}
}

猜你喜欢

转载自blog.csdn.net/qq_34454069/article/details/88756270