问题标题: 酷町堂:求2787代码错误原因

0
0
已解决
张曈
张曈
高级守护
高级守护
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
bool cmp(string s1,string s2)
{
    return s1.size()==s2.size()? s1+s2<s2+s1 : s1.size()<s2.size();
}
int main()
{
    string a[101];
    int n,m,i;
    cin>>n>>m;
    for(i=1;i<=n;i++)
        cin>>a[i];
    sort(a+1,a+1+n,cmp);
    for(i=1;i<=m;i++)
        cout<<a[i];
    return 0;
}

以上是代码

注意,仅给出自己代码、本题总思路、修改方法等而不给出错误原因不予采纳


0
已采纳
徐铭凯
徐铭凯
资深守护
资深守护

举个反例

3 2

99 101 110

你的输出:99101

正确输出:10199

你程序只能选出应选的所有数字,但无法排出他们的正确顺序。

(确实该选99、101啊)

正确:

排两次序。

第一次,排1~n,主条件长度从小到大,副条件a+b<b+a。(就是你的排序)

第二次,排1~m,条件a+b<b+a。

就能AC啦。

(陆老师讲过这题,你没听,看不懂我的程序后果自负)

徐铭凯在2018-08-15 11:57:54追加了内容

(我这符合要求吧)

0
杨子逸
杨子逸
新手天翼
新手天翼
bool cmp_n(string a,string b)
{
    if(a.size()!=b.size())
    return a.size()<b.size();
    return a+b<b+a;
}
bool cmp_m(string a,string b)
{
    return a+b<b+a;
}
0
徐铭凯
徐铭凯
资深守护
资深守护

张瞳你不要得到满意答案不给采纳

最多只能积三个问题未采纳

你别想赖皮了

0
我要回答