CSP-S T4这里为什么会SF啊
  • 板块题目总版
  • 楼主宇宙少年
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/10/21 19:36
  • 上次更新2023/11/2 12:11:33
查看原帖
CSP-S T4这里为什么会SF啊
365388
宇宙少年楼主2023/10/21 19:36

解释SF:segmentation fault的意思,常见原因如数组访问越界

代码如下,SF的地方是在主函数建边那里

#include<bits/stdc++.h>
using namespace std;
#define ll long long
struct Node{
    bool vis;
    int b,c;
    long long a,h;
    vector<int> nxt;
}node[100002];
int n,ans=1e9;
void solve(int dep){
    if(dep>=ans) return;
    for(int i=1;i<=n;i++){
        if(node[i].vis) node[i].h+=max(node[i].b+node[i].c*dep,1);
    }
    if(dep>=n){
        bool x=true;
        for(int i=1;i<=n;i++){
            if(node[i].h<node[i].a){
                x=false;
                break;
            }
        }
        if(x) ans=min(ans,dep);
        else solve(dep+1);
        return;
    }
    else{
        for(int i=1;i<=n;i++){
            if(node[i].vis) continue;
            int len=node[i].nxt.size();
            for(int j=0;j<len;j++){
                if(!node[node[i].nxt[j]].vis) continue;
                node[i].vis=true;
                solve(dep+1);
                node[i].h=0;
                node[i].vis=false;
            }
        }
    }
}
int main(){
    freopen("tree.in","r",stdin);
    freopen("tree.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%lld%d%d",&node[i].a,&node[i].b,&node[i].c);
        node[i].h=0;
        node[i].vis=false;
        node[i].nxt1=0;
        node[i].nxt2=0;
    }
    for(int i=1;i<n;i++){
        int u,v;
        node[u].nxt.push_back(v);
        node[v].nxt.push_back(u);
    }
    printf("%d",ans);
    return 0;
}

注:如发现CE的情况,是我现场把代码改回SF版本的时候出的问题,因为我见到SF后找不到原因就注释了那段代码重写了特殊情况B/C的,结束公示代码了才改回SF版本让谷友找bug的()

2023/10/21 19:36
加载中...