P1050 WA 70pts 求调(有 Hack 数据)
  • 板块灌水区
  • 楼主SKQA
  • 当前回复1
  • 已保存回复1
  • 发布时间2025/1/28 22:29
  • 上次更新2025/1/29 09:28:03
查看原帖
P1050 WA 70pts 求调(有 Hack 数据)
722316
SKQA楼主2025/1/28 22:29

rt,[P1050]。(https://www.luogu.com.cn/problem/P1050)

#include<cstdio>
#include<cstring>
using namespace std;
const int K=110;
int k,ln,n[K],ans[K]={1},mul[K],n1[K],pow[K];
bool flag;
char sn[K];
int main(){
	scanf("%s%d",sn,&k);
	ln=strlen(sn);
	for(int i=0;i<k&&ln-i-1>=0;i++)mul[i]=n[i]=sn[ln-i-1]-'0';
	for(int i=0;i<k;i++){
		for(int j=0;j<k;j++)n1[j]=n[j],pow[j]=!j;
		int cnt=0;
		do{
			for(int j=k-1;j>=0;j--){
				n1[j]*=mul[0];
				for(int l=j-1;l>=0;l--)n1[j]+=n1[l]*mul[j-l];
			}
			for(int i=0;i+1<k;i++)n1[i+1]+=n1[i]/10,n1[i]%=10;
			n1[k-1]%=10;
			for(int j=k-1;j>=0;j--){
				pow[j]*=mul[0];
				for(int l=j-1;l>=0;l--)pow[j]+=pow[l]*mul[j-l];
			}
			for(int i=0;i+1<k;i++)pow[i+1]+=pow[i]/10,pow[i]%=10;
			cnt++;
			if(cnt>10){
				printf("-1");
				return 0;
			}
		}while(n1[i]!=n[i]);
		for(int i=0;i<k;i++)ans[i]*=cnt;
		for(int i=0;i+1<k;i++)ans[i+1]+=ans[i]/10,ans[i]%=10;
		ans[k-1]%=10;
		for(int i=0;i<k;i++)mul[i]=pow[i];
	}
	for(int i=k-1;i>=0;i--)
		if(flag||ans[i])flag=true,printf("%d",ans[i]);
	return 0;
}

Hack 数据:

  • 输入:

    4258161756319813789273201815945700206240682325082659165160258449299542088911212464353263203289007789 85
    
  • 正确输出:

    500000000000000000000000000000000000000000000000000000000000000000000000000000000000
    
  • 我的输出:

    100000000000000000000000000000000000000000000000000000000000000000000000000000000000
    
2025/1/28 22:29
加载中...