除了快读快写和一些宏定义,有啥区别啊 /yiw
为啥一个 AC 一个 WA。
AC:
#include <bits/stdc++.h>
int a[200010], n, c;
long long ans = 0;
using namespace std;
int findx(int k) { // т材Ω?竚
int l = 1, r = n, ans = -1;
while (l <= r) {
int mid = (l+r)/2;
if(a[mid]>=k){
r=mid-1;
if(a[mid]==k) ans=mid;
}
else l=mid+1; // Ы??
}
return ans;
}
int findy(int k) { // т程Ω?竚
int l = 1, r = n, ans = -1;
while (l <= r) {
int mid = (l+r)/2;
if(a[mid]<=k){
l=mid+1;
if(a[mid]==k) ans=mid;
}
else r=mid-1;
}
return ans;
}
int main() {
cin >> n >> c;
for(int i = 1; i <= n; i++)
cin >> a[i];
sort(a + 1, a + n + 1);
for(int i = 1; i <= n; i++) {
int x = findx(a[i] + c);
int y = findy(a[i]+c);
if(x == -1) continue;
ans += (y-x+1);
}
cout << ans; // ?氮
}
WA:
#include<bits/stdc++.h>
#define int long long
#define fore(i,x,n) for(int i=x;i<=n;i++)
using namespace std;
const int MAXX=100005;
const int mod=1;
inline int read(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}
while(isdigit(ch)){x=x*10+ch-48;ch=getchar();}
return x*f;
}
inline void write(int x){
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
inline void writesp(int x){
write(x); putchar(' ');
}
inline void writeln(int x){
write(x); putchar('\n');
}
int n,c,a[MAXX];
int ans=0;
inline int findx(int k){
int l=1,r=n,ans=-1;
while(l<=r){
int mid=(l+r)/2;
if(a[mid]>=k){
r=mid-1;
if(a[mid]==k) ans=mid;
}
else l=mid+1;
}
return ans;
}
inline int findy(int k){
int l=1,r=n,ans=-1;
while(l<=r){
int mid=(l+r)/2;
if(a[mid]<=k){
l=mid+1;
if(a[mid]==k) ans=mid;
}
else r=mid-1;
}
return ans;
}
signed main(){
n=read(); c=read();
fore(i,1,n) a[i]=read();
sort(a+1,a+1+n);
fore(i,1,n){
int x=findx(a[i]+c);
int y=findy(a[i]+c);
if(x==-1) continue;
ans+=(y-x-1);
}
write(ans);
}