给你长度为 10^5~10^6长度,由数字组成的串 其中有4位不见了 补全该串 使得在该串能整除 77的同时 尽可能大
// 先计算出每个 n*10^m 模 77 的循环节 n=0,1,2..,9
// 然求出串的每位 mod 77 累加 抹黑的4为另外处理
#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
#include <math.h>
#include <stdio.h>
#include <string.h>
using namespace std;
#define maxm 100010
#define maxn 1000110
int rc[][];
int num[];
void calculate(int n){
int vi[]={};
int m=n;
int ct=;
rc[m][ct++]=m;
vi[n]=true;
while(){
n=n*;
n=n%;
if(vi[n]) break;
vi[n]=true;
rc[m][ct++]=n;
// printf("%d\n",n);
}
num[m]=ct;
}
char str[maxn];
int main()
{
int i,j,k,l;
int d[]={,,,,,,,,,,};
int a[];
for(i=;i<=;i++)
calculate(i);
num[]=;
// for(i=1;i<=9;printf("\n"),i++)
// for(j=0;j<num[i];j++)
// printf("%d ",rc[i][j]);
int tp;
// printf("%d\n",11167%77);
while(scanf("%s",str)!=EOF){
int len=strlen(str);
tp=j=;
for(i=;i<len;i++){
if(str[len-i-]!='x'){
k=str[len-i-]-'';
tp+=rc[k][i%num[k]];
}else{
a[++j]=i;
// printf("%d ",i);
}
}
// printf("%d\n",tp);
int lin;
int flag=;
for(i=;i<=;i++)
{
for(j=;j<=;j++)
{
for(k=;k<=;k++){
for(l=;l<=;l++){
lin=tp+rc[d[l]][a[]%num[d[l]]];
lin=lin+rc[d[k]][a[]%num[d[k]]];
lin=lin+rc[d[j]][a[]%num[d[j]]];
lin=lin+rc[d[i]][a[]%num[d[i]]];
if(lin%==) {flag=;break;}
}
if(!flag) break;
}
if(!flag) break;
}
if(!flag) break;
}
str[len-a[]-]=''+d[l];
str[len-a[]-]=''+d[k];
str[len-a[]-]=''+d[j];
str[len-a[]-]=''+d[i];
printf("%s\n",str);
}
return ;
}