Problem B
Super Number
Input: Standard Input Output: Standard Output Time Limit: 3 Seconds
主要是还是效率问题,一般暴力就直接怎么想就怎么解决就行了,但这题死活都是TEL,用了long long超时,用了char型替换整型不超时,如此还是不懂 -_- Mark一下~~
#include<iostream> #include<cstdio> #include<cstring> using namespace std; char digit[32]; int n, m; bool digit_mod(int k){ int sum = 0; for(int i=0; i<k; ++i){ sum = (sum*10+digit[i])%k; } if(sum == 0) return true; return false; } bool Traverse(int cur){ if(cur == m) return true; for(int i=0; i<=9; ++i){ digit[cur] = i; if(cur<n-1 || digit_mod(cur+1)){ if(Traverse(cur+1)) return true; } } return false; } int main(){ int t, times = 0; cin>>t; while(t--){ cin>>n>>m; memset(digit, 0, sizeof(digit)); bool flag = false; for(int i=1; i<=9 && flag == false; ++i){ digit[0] = i; flag = Traverse(1); } printf("Case %d: ", ++times); if(flag == false) printf("-1 "); else{ for(int i=0; i<m; ++i){ printf("%c", digit[i]+'0'); } printf(" "); } } return 0; }