求帮忙找错(违规自删)
  • 板块灌水区
  • 楼主yexingyu
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/10/5 16:30
  • 上次更新2023/11/2 15:28:55
查看原帖
求帮忙找错(违规自删)
770762
yexingyu楼主2023/10/5 16:30

求救,下面的这两个程序有什么区别... (奶牛的不在场证明) 做了两年半。

#include<bits/stdc++.h>
using namespace std;
const long long MS=1e5+5;
long long g,n,ans=0;
struct Crime{
	long long x,y;
	long long t;
}crime[MS];
long long x,y;
long long t;

int calc(long long x1,long long y1,long long x2,long long y2){
	long long tx=x1-x2,ty=y1-y2; 
	return (tx*tx+ty*ty);  
}
bool check(int crime_number){
	long long l=calc(crime[crime_number].x,x,crime[crime_number].y,y);
	long long can_walk=(crime[crime_number].t-t);
	if(can_walk*can_walk>=l) return 1;
	else return 0;
}
int closest_crime(){
	long long l=1,r=g,mid;
	while(l<r){
		mid=(l+r)/2;
		if(crime[mid].t>=t)
			r=mid;
		else
			l=mid+1;
		if(t>crime[r-1].t and t<crime[r].t+1){
			mid=r;
			break;
		}
		if(t>crime[l].t and t<crime[l+1].t+1){
			mid=l+1;
			break;
		}
	}
	return mid;
}
bool is_white(){
	if(t<=crime[1].t){
		if(check(1)) return 1;
	}
	if(t>=crime[g].t){
		if(check(g)) return 1;
	}
	long long x=closest_crime();
	if(check(x)&&check(x-1)) return 1;
	return 0;
}
bool cmp(Crime a,Crime b){
	return a.t<b.t;
}
int main(){
	cin>>g>>n;
	for(int i=1;i<g+1;i++)
		cin>>crime[i].x>>crime[i].y>>crime[i].t;
	sort(crime+1,crime+g+1,cmp);
	for(int i=1;i<n+1;i++){
		cin>>x>>y>>t;
		if(is_white()) ans++;
	}
	cout<<n-ans;
	return 0;
}

{```cpp #include<bits/stdc++.h> using namespace std; int l,r,mid,m,n,ans; long long x,y,t; struct SB { long long x,y,t; }a[100005]; bool cmp(SB x,SB y) { return x.t<y.t; } bool check(int k) { if((a[k].x-x)(a[k].x-x)+(a[k].y-y)(a[k].y-y)<=(a[k].t-t)*(a[k].t-t)) return true; return false; } void find(int t) { if(t<=a[1].t) { if(check(1)) ans++; return; } if(t>=a[m].t) { if(check(m)) ans++; return; } l=1;r=m; while(l<r) { mid=(l+r)/2; if(a[mid].t>=t) r=mid; else l=mid+1; if(t>a[r-1].t&&t<=a[r].t) { mid=r; break; } if(t>a[l].t&&t<=a[l+1].t) { mid=l+1; break; } } if(check(mid)&&check(mid-1)) ans++; } int main() { scanf("%d%d",&m,&n); for(int i=1;i<m+1;++i) scanf("%lld%lld%lld",&a[i].x,&a[i].y,&a[i].t); sort(a+1,a+m+1,cmp); for(int i=1;i<n+1;++i) { scanf("%lld%lld%lld",&x,&y,&t); find(t); } printf("%d",n-ans); }


	if((a[k].x-x)*(a[k].x-x)+(a[k].y-y)*(a[k].y-y)<=(a[k].t-t)*(a[k].t-t)) return true;
    	return false;
}
void find(int t)
{
	if(t<=a[1].t) 
	{
		if(check(1)) ans++;
		return;
	}
	if(t>=a[m].t)
	{
		if(check(m)) ans++;
		return;
	}
	l=1;r=m;
	while(l<r)
	{
		mid=(l+r)/2;
		if(a[mid].t>=t) r=mid;
		else l=mid+1;
		if(t>a[r-1].t&&t<=a[r].t) 
		{
			mid=r;
			break;
		}
		if(t>a[l].t&&t<=a[l+1].t)
		{
			mid=l+1;
			break;
		}
	}
	if(check(mid)&&check(mid-1)) ans++;
}
int main()
{
	scanf("%d%d",&m,&n);
	for(int i=1;i<m+1;++i)
		scanf("%lld%lld%lld",&a[i].x,&a[i].y,&a[i].t);
	sort(a+1,a+m+1,cmp);
	for(int i=1;i<n+1;++i)
	{
		scanf("%lld%lld%lld",&x,&y,&t);
		find(t);
	}
	printf("%d",n-ans);
}
2023/10/5 16:30
加载中...