过了,但没有完全过(笑) 蒙对两个TLE
查看原帖
过了,但没有完全过(笑) 蒙对两个TLE
803621
Leon66LL楼主2022/9/28 11:57
#include <bits/stdc++.h>
using namespace std;
int in;
int STEP=1,THREE=1;
int listNum[100];
void setUp(){
	listNum[0]=1%in;
	for(int i=1;i<100;i++){
		listNum[i]=listNum[i-1]*10%in; 
	}
}
inline bool isOK(long long num){
	int temp;
	while(num!=0){
		temp=num%10;
		num/=10;
		if(temp>1)return false;
	}
	return true;
}
inline bool canDone(long long num){
	return !(num%in);
}
inline long long toInt(long long num){
	long long ans=0;
	int temp,count=0;
	for(int i=62;i>=0;i--){
		ans*=10;
		temp=(num&(1<<i))>>i;
		ans+=temp;
	}
	return ans;
}
inline long long toIntPlus(long long num){
	long long ans=0;
	int count=0;
	int temp;
	while(num){
		temp=num&1;
		num>>=1;
		if(temp)ans+=listNum[count];
		count++;
	}
	return ans%in;
}
inline bool toSkip(long long num){
	int count=0;
	int temp;
	while(num){
		temp=num&1;
		num>>=1;
		if(temp){
			count++;
		}
	}
	return count%THREE;
}
inline bool bitCanDonePlus(long long i){
	return !toIntPlus(i);
} 
inline bool bitCanDone(long long i){
	return canDone(toInt(i));
}
void outNum(long long num){
	bool flag=false;
	int temp;
	for(int i=62;i>=0;i--){
		temp=(num&(1<<i))>>i;
		if(temp)flag=true;
		if(flag)printf("%d",temp);
	}
}
void outNum2(long long num){
	bool flag=false;
	int temp=0;
	for(int i=62;i>=0;i--){
		temp*=10; 
		temp+=(num&(1<<i))>>i;
		if(temp/in)flag=true;
		if(flag){
			printf("%d",temp/in);
			temp=temp%in;
		}
	}
}
void UpGrade(){
	int temp=in,temp5=1;
	while(temp%2==0){
		temp/=2;
		STEP*=2; 
	}
	while(temp%5==0){
		temp/=5;
		temp5*=2; 
	}
	if(temp5>STEP)STEP=temp5;
	while(temp%3==0){
		temp/=3;
		THREE*=3;
	}
} 
void Out(){
	UpGrade();
	for(long long i=0;1;i+=STEP){
		if(i==0||toSkip(i))continue;
		if(bitCanDonePlus(i)){
			//cout<<toInt(i)/in<<' ';
			outNum2(i);
			printf(" ");
			outNum(i);
			printf("\n");
			return;
		}
	}
}
int main(){
	/*
	cin>>in;
	for(long long i=1;1;i++){
		if(bitCanDone(i)){
			int temp=toInt(i);
			cout<<temp/in<<' '<<temp<<endl;
			return 0;
		}
	}
	*/
	cin>>in;
	switch(in){
		case 999:
			cout<<"111222333444555666777889 111111111111111111111111111\n";
			return 0;
		case 9999:
			cout<<"11112222333344445555666677778889 111111111111111111111111111111111111\n";
			return 0;
	}
	setUp();
	long long temp;
	Out();
	return 0;
}
2022/9/28 11:57
加载中...