这两个代码有啥区别?
  • 板块灌水区
  • 楼主Nllv
  • 当前回复8
  • 已保存回复8
  • 发布时间2022/5/3 16:06
  • 上次更新2023/10/28 02:18:03
查看原帖
这两个代码有啥区别?
387255
Nllv楼主2022/5/3 16:06

除了快读快写和一些宏定义,有啥区别啊 /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);
}
2022/5/3 16:06
加载中...