https://codeforces.com/contest/2067/problem/C
#include<bits/stdc++.h>
using namespace std;
//暴力
long long chm[11]={0,9,99,999,9999,99999,999999,9999999,99999999,999999999,9999999999};
long long mi[11]={1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000,10000000000};
long long n,t,stp=10;
int xx=1;
int pos(long long x,long long y){//从右往左数位数
long long a,b;
a=x%mi[y];
b=x%mi[y-1];
if(x/mi[y-1]<1)return 10;
else return (a-b)/mi[y-1];
}//返回位数
long long a[10008];
int main(){
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
cin>>t;long long ans,stp1;
while(t--){
cin>>n;stp=10;
for(int i =1;i<=10;i++){
ans=0;xx=1;stp1=0;long long flag = n;
while(xx){
for(int j=1;j<=10;j++){
if(pos(flag,j)==7){ans=1;}
}
if(ans==0){stp1++;flag+=chm[i];}
else {stp=min(stp,stp1);xx=0;}
}
//cout<<ans<<" "<<stp<<endl;
}cout<<stp<<endl;
}
return 0;
}
打了我2个小时,用贪心即可,我也不会证。
打暴力很多坑(其他方法我想不出来)记得开longlong,对每个9,99,99….加法的时候记得多开几个循环,对位数也对开几个循环,嗯就这艹不对,for(j)将j开到11就不行了,10正好,草拟吗不管了,能过就行