WA on 3求条
查看原帖
WA on 3求条
377969
george0929楼主2024/7/8 20:22
#include<bits/stdc++.h>
using namespace std;
#define int long long
struct xy_vec{
	int x,y;
	int operator* (const xy_vec b) const{
		return x*b.y-y*b.x;
	}
}arr[100005];
xy_vec nul;
int mianji(int x1,int y1,int x2,int y2,int x3,int y3){
	xy_vec AB,AC;
	AB.x=x2-x1,AB.y=y2-y1;
	AC.x=x3-x1,AC.y=y3-y1;
	return abs(AB*AC);
}
signed main(){
	int T;
	cin>>T;
	while(T--){
		int n,k;
		cin>>n>>k;
		for(int i=1;i<=n;i++){
			cin>>arr[i].x>>arr[i].y;
		}
		int res=0,ans=0;
		for(int i=1;i<=k+2;i++){
			res+=arr[i]*arr[i%(k+2)+1];
		}
		res=abs(res);
		ans=res;
		int now=2,tm=0;
		for(int i=1;i<=n;i++){
			if(i!=1){
				res-=mianji(arr[i-1].x,arr[i-1].y,arr[now].x,arr[now].y,arr[(now+k-1)%n+1].x,arr[(now+k-1)%n+1].y);
				res+=mianji(arr[i].x,arr[i].y,arr[now].x,arr[now].y,arr[(now+k-1)%n+1].x,arr[(now+k-1)%n+1].y);
			}
			if(now<=i){
				res-=mianji(arr[i].x,arr[i].y,arr[now].x,arr[now].y,arr[now%n+1].x,arr[now%n+1].y);
				res+=mianji(arr[i].x,arr[i].y,arr[(now+k-1)%n+1].x,arr[(now+k-1)%n+1].y,arr[(now+k)%n+1].x,arr[(now+k)%n+1].y);
				now=now%n+1;
			}
			while(tm<=1&&now<=n&&mianji(arr[i].x,arr[i].y,arr[now].x,arr[now].y,arr[now%n+1].x,arr[now%n+1].y)<=
				  mianji(arr[i].x,arr[i].y,arr[(now+k-1)%n+1].x,arr[(now+k-1)%n+1].y,arr[(now+k)%n+1].x,arr[(now+k)%n+1].y)){
				res-=mianji(arr[i].x,arr[i].y,arr[now].x,arr[now].y,arr[now%n+1].x,arr[now%n+1].y);
				res+=mianji(arr[i].x,arr[i].y,arr[(now+k-1)%n+1].x,arr[(now+k-1)%n+1].y,arr[(now+k)%n+1].x,arr[(now+k)%n+1].y);
				now=now%n+1;
				if(now==1) tm++;
				if(tm>1) break;
			}
//			cout<<res<<endl;
			ans=max(ans,res);
		}
		double tt=(double)ans/2.0;
//		cerr<<"ans:";
		printf("%.1lf\n",tt);
	}
	
	return 0;
}
/*
1
8 3
1 2
3 1
5 1
7 3
8 6
5 8
3 7
1 5
*/
2024/7/8 20:22
加载中...