您的位置:首页 > 其它

codeforces Gym 100338E Numbers (贪心,实现)

2015-08-21 18:04 603 查看
题目:http://codeforces.com/gym/100338/attachments

贪心,每次枚举10的i次幂,除k后取余数r在用k-r补在10的幂上作为候选答案。

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
const int maxbit = 19;
ull base[maxbit], n, k;

void preDeal()
{
base[0] = 1;
for(int i = 1; i < maxbit; i++){
base[i] = 10*base[i-1];
}
}

void ull2str(ull x,string& s)
{
int st[maxbit],top = 0;
while(x){
st[top++] = x%10+'0';
x /= 10;
}
reverse(st,st+top);
s.assign(st,st+top);
}

void work()
{
priority_queue<string,vector<string>,greater<string> > q;
int sz = maxbit-1;
while(base[sz]>n) sz--;
string str;
for(int i = 0; i <= sz; i++){
ull cur = base[i];
ull r = cur%k;
if(r != 0){
cur += k-r;
}
if(cur <= n){
ull2str(cur,str);
q.push(str);
}
}
printf("%s\n",q.top().c_str());
}

int main()
{
freopen("numbers.in","r",stdin);
freopen("numbers.out","w",stdout);
preDeal();
while(scanf("%I64u%I64u",&n,&k),n){
work();
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: