社区讨论

RE求调

P11229[CSP-J 2024] 小木棍参与者 2已保存回复 1

讨论操作

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

当前回复
1 条
当前快照
1 份
快照标识符
@mhj3y6j4
此快照首次捕获于
2025/11/03 20:20
4 个月前
此快照最后确认于
2025/11/03 20:20
4 个月前
查看原帖
CPP
/*
1.这是什么算法?从题目里面怎么看出来?(就是突破点)

2.写代码自己有错误,是什么原因?(知识不知道,还是不够仔细,如读题没理解透)

3.这题与前面什么题目感觉是类似?

*/
#include<bits/stdc++.h>
using namespace std;
int n,m,x[105];
struct node{
    int v,id;
}a[100005];
string dp[15],ans[55];
string mi(string c,string y){
    if(c=="") return y;
    if(c.size()<y.size()) return c;
    if(y.size()<c.size()) return y;
    return (c<y)?c:y;
}
bool cmp(node x,node y){return x.v<y.v;}
int main(){
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    freopen("00in.txt","r",stdin);
    dp[2]="1";
    dp[5]="2";
    dp[4]="4";
    dp[6]="6";
    dp[3]="7";
    dp[7]="8";
    x['0']=6,x['1']=2,x['2']=5,x['4']=4,x['7']=3,x['8']=7;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i].v;
        a[i].id=i;
        m=max(m,a[i].v);
    }
    m++;
    sort(a+1,a+n+1,cmp);
    int now=1;
    for(int i=1;i<=m;i++){
        if(i>=8) dp[i%8]="";
        for(char j='0';j<='8';j++){
            if(j=='3'||j=='5'||j=='6'||i-x[j]<0||dp[(i-x[j])%8]=="") continue;
            dp[i%8]=mi(dp[i%8],dp[(i-x[j])%8]+j);
        }
        while(i>=a[now].v){
            ans[a[now].id]=dp[i%8];
            now++;
        }
    }
    for(int i=1;i<=n;i++){
        if(ans[i]=="") cout<<-1<<endl;
        else cout<<ans[i]<<endl;
    }
    return 0;
}

希望debug拒接新算法哦(.^.)

回复

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

正在加载回复...