关于一个疑似UB的代码

P3955 [NOIP2017 普及组] 图书管理员

Limitless_lmw @ 2023-10-01 22:37:00

RT,教师端Windows,测评软件Cena 0.8.1,C++ 14标准,编译器大抵是MinGW(版本未知)

这是提交的代码(有文件输入输出):

#include<bits/stdc++.h>
using namespace std;

int n,q,s;
int str;
int si;

inline void read(int &n) {
    n=0;
    char ch = getchar();
    while (ch < '0' || ch > '9') {
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9') {
        n = (n << 1) + (n << 3) + (ch ^ 48);
        ch = getchar();
    }
}

int arr[1005];

int main(){
    freopen("librarian.in","r",stdin);
    freopen("librarian.out","w",stdout);
    read(n),read(q);
    for(int i = 1; i<=n; i++) read(arr[i]);
    sort(arr+1,arr+1+n);
    BREAK:
    while(q--){
        read(si),read(str);
        for(int i = 1; i<=n; i++){
            if(arr[i]%(int)(pow(10,si))==str){
                cout<<arr[i]<<'\n';
                goto BREAK;
            }
        }
        cout<<-1<<'\n';
    }
    return 0;
}

然后在第一个点,也就是

输入是:

1 10
9392912
3 912
2 10
7 2731197
2 12
7 7163045
4 8785
7 4577297
5 75400
1 2
6 493284

输出是:

9392912
-1
-1
9392912
-1
-1
-1
-1
9392912
-1

的这个测试点。

WA,提示内容:

在第 4 行:

----选手输出的第 1 列----

-1

----标准输出的第 1 列----

939291...

然后在教师端的DEV测试是对的,不排除cena使用的g++不是dev的g++的可能性

就是想问一下上面的代码有没有UB或者什么玄学因素


by Crab_Tang @ 2023-10-15 08:20:04

@Limitless_lmw 快读与全局变量名重复啦。


|