Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
37753 | LYLAKIOI | 【S】T1 | C++ | 通过 | 100 | 967 MS | 20892 KB | 2624 | 2025-05-08 12:32:53 |
#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define m_p make_pair #define p_b push_back using namespace std; typedef __int128 i128; typedef long long ll; typedef long double db; const int maxn=1e5+10; const ll mod=(ll)(1e18)+3; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } int n; struct nd { int x,y,l; }d[maxn]; bool operator<(nd a,nd b){ if(a.x!=b.x)return a.x<b.x; if(a.y!=b.y)return a.y<b.y; return a.l<b.l; } map<nd,ll>f[105],g[105]; ll ans[105],C[105][105]; inline ll mul(ll a,ll b){return (i128)a*(i128)b%(i128)mod;} inline ll add(ll a,ll b){if((a+=b)>=mod)a-=mod;return a;} void slv(){ n=read(); C[0][0]=1; up(i,1,n){ C[i][0]=1; up(j,1,i)C[i][j]=add(C[i-1][j-1],C[i-1][j]); } up(i,1,n)d[i].x=read(),d[i].y=read(),d[i].l=read(); up(i,1,n){ up(j,1,i)g[j].clear(); g[1][d[i]]=1; up(j,1,i-1)for(auto it:f[j])(g[j][it.p1]+=it.p2)%=mod; auto in=[](nd a,int x,int y){ return x>=a.x&&x<=a.x+a.l&&y>=a.y&&y<=a.y+a.l-(x-a.x); }; up(j,1,i-1)for(auto it:f[j]){ auto calc=[&](nd a,int L,int x,int y){ int l=0,r=L+1; while(l+1<r){ int mid=l+r>>1; if(in(a,x+mid,y))l=mid; else r=mid; } (g[j+1][(nd){x,y,l}]+=it.p2)%=mod; }; auto chk=[&](nd a,nd b){ if(in(a,b.x,b.y)){calc(a,b.l,b.x,b.y);return 1;} else if(in(a,b.x+b.l,b.y)){calc(a,b.x+b.l-a.x,a.x,b.y);return 1;} else if(in(a,b.x,b.y+b.l)){calc(a,b.y+b.l-a.y,b.x,a.y);return 1;} return 0; }; if(chk(it.p1,d[i])); else chk(d[i],it.p1); } up(j,1,i)f[j].swap(g[j]); } up(j,1,n)for(auto it:f[j])(ans[j]+=mul(mul(it.p2,mul(it.p1.l,it.p1.l)),(mod+1)/2))%=mod; ll res=0; down(i,n,1){ up(j,i+1,n)ans[i]=add(ans[i],mod-mul(ans[j],C[j][i])); if(i&1)res=add(res,ans[i]); } res=res*2ll%mod; if(res%2==0)cout<<res/2<<".0"; else cout<<res/2<<".5"; } int main(){ //freopen("triangle.in","r",stdin),freopen("triangle.out","w",stdout); slv(); fclose(stdin),fclose(stdout); return 0; }