社区讨论

发现一个比较简单的写法(已确认)

P1012[NOIP 1998 提高组] 拼数参与者 8已保存回复 48

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
46 条
当前快照
1 份
快照标识符
@mkj351ew
此快照首次捕获于
2026/01/18 09:56
上个月
此快照最后确认于
2026/01/21 15:30
4 周前
查看原帖
这个代码的逻辑就是每次存下可以插入的位置,然后一一尝试插入,取最大。
CPP
#include<bits/stdc++.h>
using namespace std;

int n,cnt=1;
string a[25],b[25],pb[25],c[25],res,cmp;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++)  cin>>a[i];
    b[1]=a[1];
    for(int i=2;i<=n;i++){
        for(int j=1;j<=cnt;j++)  pb[j]=b[j];
        res="";
        for(int pos=1;pos<=cnt+1;pos++){
            for(int j=1;j<=cnt+1;j++){
                if(j<pos)  c[j]=pb[j];
                if(j==pos)  c[j]=a[i];
                if(j>pos)  c[j]=pb[j-1];
            }
            cnt++,cmp="";
            for(int j=1;j<=cnt;j++)  cmp+=c[j];
            if(cmp>res){
                res=cmp;
                for(int j=1;j<=cnt;j++)  b[j]=c[j];
            }
            cnt=cnt-1;
        }
        cnt++;
    }
    for(int i=1;i<=cnt;i++)  cout<<b[i];
}
AC了,https://www.luogu.com.cn/record/257946648。
跑的也不算慢,而且思维难度很低,差不多橙黄。
如果我饭堂了不要喷我qwq.

回复

48 条回复,欢迎继续交流。

正在加载回复...