样例过了,结果不过
  • 板块P1222 三角形
  • 楼主_5t0_0r2_
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/7/23 11:54
  • 上次更新2023/10/27 18:47:55
查看原帖
样例过了,结果不过
564694
_5t0_0r2_楼主2022/7/23 11:54
#include<bits/stdc++.h>
using namespace std;
struct p{
	int x,y;
};
struct size_p{
	p ps;
	int sz;
};
vector<size_p>pos;
void change(p pos1,int tmpsize){
	for(int i = 0;i < (int)pos.size();i++){
		if(pos[i].ps.x == pos1.x && pos[i].ps.y == pos1.y){
			pos[i].sz = max(pos[i].sz,tmpsize);
			return;
		}
	}
	pos.push_back((size_p){pos1,tmpsize});
}
int n,dot;
double area = 0;
int main(){
	scanf("%d", &n);
	for(int i = 1;i <= n;i++){
		int x,y,m;
		scanf("%d%d%d",&x,&y,&m);
		for(int j = x;j <= x + m - 1;j++){
			for(int k = y;k <= y - j;k++){
				if(j < x + m - 1 && k < y - j){
//					pos[(p){j,k}] = 1;
					change((p){j,k},1);
//					if(!in((p){j,k}))
//						position.push_back((p){j,k});	
				}
				else{
//					pos[(p){j,k}] = max(pos[(p){j,k}],0);
					change((p){j,k},0);
//					if(!in((p){j,k}))
//						position.push_back((p){j,k});
				}
			}
		}
	}
	int half = 0;
	for(int i = 0;i < (int)pos.size();i++){
		if(pos[i].sz == 1)
			area += 1;
		else
			half++;
	}
	area += (double)half / 2;
	if(half % 2 == 0)
		printf("%d.0",(int)area);
	else
		printf("%d.5",(int)area);
	return 0;
}
2022/7/23 11:54
加载中...