rt,这个东西是不是从 C++17 开始就被和谐了?
事情是这样的——今天去打 CF Round 1000 的 VP,切 B 题的时候遇到了一点问题。先放我的代码。
#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
const int N=1e5+5;
int t;
int a[N],b[N];
inline bool cmp(int a,int b){
return a<b;
}
inline void work(){
int n,l,r;
static int a_,b_;//注意这里。
cin>>n>>l>>r;
for(int i=1;i<=n;++i)cin>>a[i],b[i]=a[i];
sort(a+1,a+r+1,cmp);
sort(b+l,b+n+1,cmp);
for(int i=1;i<=r-l+1;++i)a_+=a[i];
for(int i=l;i<=r;++i)b_+=b[i];
cout<<min(a_,b_)<<"\n";
return ;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>t;
while(t--)work();
return 0;
}
之前在 oi-wiki 上看到过一次 static
的使用,感觉好奇,就去查了一下。菜鸟上有这样的记载:
static 的第三个作用是默认初始化为 0。
刚好,代码中需要令 a_
和 b_
的初值为 0,我就试着用了一下,喜提 WA。
后来发现,把:
static int a_,b_;
改成:
int a_=0,b_=0;
即可 AC。
接着又试了 C++20 和 C++23,都得到了一样的结果。
所以这个东西是已经成摆设了吗。