模拟赛笔记(1)

1、XR0210

T1:U105209 拼数P1012 [NOIP1998 提高组] 拼数

将数字串按照 $a+b>b+a$ 排序,如何证明全序关系?即求证:若 $a+b>b+a$,$b+c>c+b$,则 $a+c>c+a$。

证明:

设 $a$ 的位数为 $x$,$b$ 的位数为 $y$,$c$ 的位数为 $z$,则 $a+b=a\cdot10^y+b$,$b+a=b\cdot10^x+a$。

所以 $\dfrac{a}{10^x-1}>\dfrac{b}{10^y-1}$,同理可得 $\dfrac{b}{10^y-1}>\dfrac{c}{10^z-1}$,因此 $a+c>c+a$。

证毕。

注意是只选三个而不是全选,所以数字位数要作为第一关键字。

 1 const int N = 1e6 + 10;
 2 string a[N];
 3 
 4 inline bool cmp1(const string &a, const string &b)
 5 {
 6     return a.size() != b.size() ? a.size() > b.size() : a + b > b + a;
 7 }
 8 inline bool cmp2(const string &a, const string &b)
 9 {
10     return a + b > b + a;
11 }
12 
13 int main()
14 {
15     int n; cin >> n;
16     for (int i = 1; i <= n; ++i) cin >> a[i];
17     sort(a + 1, a + n + 1, cmp1); sort(a + 1, a + 4, cmp2);
18     cout << a[1] << a[2] << a[3];
19     fwrite(pbuf, 1, pp - pbuf, stdout); return 0;
20 }
View Code

To be continued...

posted @ 2022-03-04 17:57  jhqqwq  阅读(57)  评论(0编辑  收藏  举报