社区讨论
求助 NOIP 编译器
学术版参与者 9已保存回复 26
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 24 条
- 当前快照
- 1 份
- 快照标识符
- @mii4v7qm
- 此快照首次捕获于
- 2025/11/28 08:37 3 个月前
- 此快照最后确认于
- 2025/11/29 13:30 3 个月前
目前我遇到过三个有关编译器的问题,想问问在 NOIP 上会不会出现。
- 以下代码以 C++14 (GCC 9) 编译时,输入
1,会输出1 0。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1000005;
ll n;
bool ac[N];
int main(){
cin>>n;
for(ll i = 1; i <= n; i++) {
ac[i]=(((n - i + 1) % 2) == 0);
}
cout << ac[n] << " " << (((n-n+1)%2)==0) << "\n";
return 0;
}
所以有如下问题:
-
为什么输出会是
1 0? -
这种错误如何避免?
-
NOIP 考场上可能会出现以上问题吗?
- 在 AT_abc330_f 中,以下代码在 atcoder 以 C++ 20 (gcc 12.2) 运行时会超时,而加上排序代码可以 AC;如果选择 C++ 17 (Clang 16.0.6) 则无论如何均能 AC。
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
typedef long long ll;
using namespace std;
const int N = 2e5 + 5;
int n,k,a[2][N];
inline int cal(int type,int x,int t){
int ans = 0;
for(int i = 1;i <= n;i++){
if(a[type][i] <= x)ans += x - a[type][i];
if(a[type][i] >= x + t)ans += a[type][i] - x - t;
}
return ans;
}
inline int calc(int type,int t){
int l = 0,r = INT_MAX - t;
while(r - l > 2){
int mid1 = l + (r - l) / 3,mid2 = r - (r - l) / 3;
if(cal(type,mid1,t) <= cal(type,mid2,t))r = mid2;
else l = mid1;
}
int ans = LLONG_MAX;
for(int i = l;i <= r;i++)ans = min(ans,cal(type,i,t));
return ans;
}
inline bool check(int t){
return calc(0,t) + calc(1,t) <= k;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> k;
for(int i = 1;i <= n;i++)cin >> a[0][i] >> a[1][i];
//sort(a[0] + 1,a[0] + n + 1),sort(a[1] + 1,a[1] + n + 1);
// ^^^^^^ 上面是排序代码 ^^^^^^
int l = -1,r = INT_MAX;
while(r - l > 1){
int mid = (l + r) / 2;
if(check(mid))r = mid;
else l = mid;
}
cout << r;
}
所以有如下问题:
-
NOIP 考场是使用 gcc 还是 clang?
-
为什么会出现以上问题?
-
如何避免?
- 见 https://www.luogu.com.cn/discuss/1202048 即下面的评论。
所以有同样的问题:
-
为什么会出现以上现象?
-
如何避免?
感谢帮忙回复的 OIer 们。祝你们 NOIP rp++。
不接受 AI 回复。因为我已经问过了。
回复
共 26 条回复,欢迎继续交流。
正在加载回复...