D. Expression Evaluation Error
链接:
https://codeforces.com/contest/1567/problem/D
题意:
求一组n个数,10进制下其数组的和是s,并且数组的和在11进制下最大
Code:
尽量保证每一高位上的数最大
#include <algorithm>
#include <iostream>
#include <math.h>
#include <vector>
#include <string.h>
#include <map>
using namespace std;
typedef long long ll;
typedef long long ld;
int jud(vector<int>vet, int n){
int sum = 0;
for(int i = 0; i < vet.size(); i++) sum += vet[i];
return sum >= n;
}
int main(){
int t; scanf("%d",&t);
while(t--){
int s, n; scanf("%d%d",&n,&s);
vector<int>vet;
while(n){
vet.push_back(n%10);
n /= 10;
}
while( ! jud(vet, s)){
for(int i = 1; i < vet.size(); i++){
if( !jud(vet, s) && vet[i]){
vet[i]--, vet[i-1]+=10;
break;
}
}
}
if(s > 1){
for(int i = 0; i < vet.size(), s > 1; i++) {
while(vet[i] && s > 1){
ll t = pow(10,i);
cout<<t<<' ', vet[i]--, s--;
}
}
}
ll ss = 0;
for(int i = vet.size()-1; i >= 0 ; i--)
ss = ss*10 + vet[i];
printf("%d\n",ss);
}
return 0;
}