cf 376C - Divisible by Seven

    xiaoxiao2021-03-25  51

    点击打开链接

    题意:

    给你一个数,你弄够任意调换数的位置,最后让你输出能被7整除的组合形式。

    题解:

    给你的数最少四位,还必有1,6,8,9;

    所以一定能构造成功,

    然后发现 

    x=a+b;

     x%7 =(a%7+b%7)%7;

    而mod7 的结果无非是 0——6.

    那么枚举出 (0-6)和{1,6,8,9} 能组合成的mod7==0 的数,

    然后有0 加后面,非零加前面就好了。

    #include <stdio.h> #include <string.h> #include <iostream> #include <map> #include <math.h> #define LL long long using namespace std; const int maxn=1e6+10; const int mod=1e9+7; char a[maxn]; int s[4]={1,6,8,9}; int v[222]; char ss[8][5]={"1869","6198","1896","1689","1986","1968","1698"}; int main(){ // for(int i=0;i<7;++i){ // int wan=i*10000; // for(int j=0;j<4;++j){ // int qian=s[j]*1000; // for(int k=0;k<4;++k){if(k==j) continue; // int bai=s[k]*100; // for(int l=0;l<4;++l){if(l==j||l==k) continue; // int shi=s[l]*10; // for(int q=0;q<4;++q){if(q==k||q==j||q==l) continue; // int w=wan+qian+bai+shi+s[q]; // if(w%7==0) printf("%d ",w); // } // } // } // } // } scanf("%s",a); int len=strlen(a); int t=0,cnt=0; for(int i=0;i<len;++i){ if(a[i]=='0') cnt++; else if((a[i]=='1'||a[i]=='6'||a[i]=='8'||a[i]=='9')&&!v[a[i]]) v[a[i]]=1; else { t=t*10+a[i]-'0'; t%=7; printf("%c",a[i]); } } printf("%s",ss[t]); for(int i=0;i<cnt;++i) printf("0"); puts(""); return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-39082.html

    最新回复(0)