Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
24616 | 岳亦铭 | 【S】T1 | C++ | 内存超限 | 66 | 387 MS | 138088 KB | 1451 | 2024-01-08 14:21:05 |
#include <bits/stdc++.h> using namespace std; #define int long long const int maxn=110,maxa=2e6+10; int n; struct node { int x,y,l; }a[maxn]; vector<int> st[maxa],ed[maxa]; int cnt[maxa],cnt2[maxa]; int pos[maxn]; double ans; int d; inline void upd(int x) { if(cnt[x]%2!=0) d++; else d--; } signed main() { cin>>n; int mx=0; for(int i=1;i<=n;i++) cin>>a[i].x>>a[i].y>>a[i].l,mx=max(mx,a[i].x+a[i].l); for(int i=1;i<=n;i++) st[a[i].x].push_back(i),ed[a[i].x+a[i].l-1].push_back(i); vector<int> vec; for(int i=1;i<=mx;i++) { for(register int j=0;j<st[i].size();j++) { int t=st[i][j]; for(register int k=a[t].y;k<=a[t].y+a[t].l-2;k++) { cnt[k]++; upd(k); } pos[t]=a[t].y+a[t].l-1; cnt2[pos[t]]++; vec.push_back(t); } ans+=d; for(register int j=0;j<vec.size();j++) { int t=vec[j]; if((cnt[pos[t]]+cnt2[pos[t]])%2!=0&&cnt[pos[t]]%2==0) ans+=0.5; else if(cnt[pos[t]]%2!=0&&(cnt[pos[t]]+cnt2[pos[t]])%2==0) ans-=0.5; } for(register int j=0;j<vec.size();j++) { int t=vec[j]; cnt2[pos[t]]--,pos[t]--,cnt2[pos[t]]++,cnt[pos[t]]--; upd(pos[t]); } for(register int j=0;j<ed[i].size();j++) { int t=ed[i][j]; vector<int> tmp; for(register int k=0;k<vec.size();k++) if(vec[k]!=t) tmp.push_back(vec[k]); vec=tmp; cnt2[pos[t]]--,cnt[pos[t]]++; upd(pos[t]); } } printf("%.1f\n",ans); return 0; }