乙個車牌號由n位數字組成。如果乙個車牌至少有k位數字是相同的,那麼我們就說這個車牌漂亮的車牌。現在華沙想要改變他自己的車牌,使得他的車牌變得漂亮。當然,改車牌是要花錢的。每改變一位數字所要花費的費用等於當前位上的新舊數字之差的絕對值。那麼總費用就是每位上所花費用的總和。
舉例如下,
舊牌為0123,新牌為7765,那麼對應第一位所花費用為|0-7|=7,第二位為|1-7|=6,第三位為|2-6|=4,第四位為|3-5|=2,總和為7+6+4+2=19
華沙想用最少的錢,使他的車牌變得漂亮起來。現在給定n,k,和舊牌的號碼,計算換牌的最少費,以及新牌的號碼,
如果最少費用的號碼有多個,我們取字典序最小的那個。
樣例解釋:
在樣例中,把第二個數字換成「8」花費|9-8|=1,把第五個數字換成「8」也花了1。
把第六個數字換成「8」花費|6-8|=2.總費用為1+1+2=4,新號碼為「888188」
兩個長度為n的序列比較方法如下。
存在兩個序列x,y,長度都是n。
如果存在i(1≤i≤n)和任意j(1≤j<i)使得 xi<yixi<yi 並且 xj=yjxj=yj ,那麼我們就說x比y小。
0到9迴圈,每次排序改變前面的。
排序規則,先排差絕對值小的,相等先排數大的,這樣字典序會改小,數還相等,如果小於當前迴圈的i,說明字典序會變大,就先排後面的,否則先排前面的。
#include#include#include#include#include#define io_opt ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std;
int n,k;
struct ee[10020];
e ans[10020];
e cur[10020];
int mn=1e9;
bool ecmp(e x,e y)
return false;
}void cpy(e x,e y)
}string s;
int tmp=0;
int ab(int x)
int cmp(e x,e y)
} return ab(xx-tmp)>n>>k;
cin>>s;
for(int i=0;iint cmn;
for(int i=0;i<=9;i++)
/*if(i==2)
cout<}*/
sort(cur+1,cur+1+n,cmp2);
if(cmn} }
cout
cout
}
51nod1621 花錢買車牌
乙個車牌號由n位數字組成。如果乙個車牌至少有k位數字是相同的,那麼我們就說這個車牌漂亮的車牌。現在華沙想要改變他自己的車牌,使得他的車牌變得漂亮。當然,改車牌是要花錢的。每改變一位數字所要花費的費用等於當前位上的新舊數字之差的絕對值。那麼總費用就是每位上所花費用的總和。舉例如下,舊牌為0123,新牌...
51nod 1621花錢買車牌(貪心)
乙個車牌號由n位數字組成。如果乙個車牌至少有k位數字是相同的,那麼我們就說這個車牌漂亮的車牌。現在華沙想要改變他自己的車牌,使得他的車牌變得漂亮。當然,改車牌是要花錢的。每改變一位數字所要花費的費用等於當前位上的新舊數字之差的絕對值。那麼總費用就是每位上所花費用的總和。舉例如下,舊牌為0123,新牌...
51nod1621 花錢買車牌 排序 貪心
1621 花錢買車牌 codeforces 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 乙個車牌號由 n位數字組成。如果乙個車牌至少有 k位數字是相同的,那麼我們就說這個車牌漂亮的車牌。現在華沙想要改變他自己的車牌,使得他的車牌變得漂亮。當然,改車牌是要花錢的...