QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#798362 | #168. Cube Dividing | CarroT1212 | WA | 841ms | 157916kb | C++17 | 2.1kb | 2024-12-04 12:50:41 | 2024-12-04 12:50:41 |
Judging History
answer
#include <bits/stdc++.h>
#define pb push_back
#define fi first
#define se second
#define go(xx,yy,zz) for(ll x=xx-1;x<=xx+1;x++)for(ll y=yy-1;y<=yy+1;y++)for(ll z=zz-1;z<=zz+1;z++)
using namespace std; bool MEM;
using ll=long long; using ld=long double;
using pii=pair<int,int>; using pll=pair<ll,ll>;
const int I=1e9;
const ll J=1e18,K=1e6+7,N=5e6+7;
ll n,m,nm,a,b,c,ans,mm[N];
struct nod {
ll x,y,z;
bool operator == (const nod &b) const { return x==b.x&&y==b.y&&z==b.z; }
bool operator < (const nod &b) const { return x!=b.x?x<b.x:y!=b.y?y<b.y:z<b.z; }
} d[N];
map<nod,ll> mp;
vector<ll> v;
bool chk(ll x,ll y,ll z) { return 0<=x&&x<a&&0<=y&&y<b&&0<=z&&z<c; }
struct dsu {
ll f[N];
void ini(ll n) { iota(f+1,f+n+1,1); }
ll fnd(ll x) { return f[x]==x?x:f[x]=fnd(f[x]); }
void mrg(ll x,ll y) { f[fnd(x)]=fnd(y); }
} D;
void solve(ll o) {
map<pll,vector<ll>> pm;
for (ll i=1;i<=m;i++)
pm[o==0?(pll){d[i].x,d[i].y}:o==1?(pll){d[i].x,d[i].z}:(pll){d[i].y,d[i].z}].pb(mm[i]);
cerr<<clock()<<"\n";
for (auto vv:pm) {
vector<ll> v=vv.se;
for (ll i=0;i+1<v.size();i++) {
ll x=v[i],y=v[i+1];
if (x>n&&y>n) D.mrg(x,y);
}
}
cerr<<clock()<<"\n";
}
mt19937 dnr(time(0));
ll rnd(ll l,ll r) { return dnr()%(r-l+1)+l; }
void mian() {
// scanf("%lld%lld%lld%lld",&a,&b,&c,&n);
a=1e6,b=1e6,c=1e6,n=2e4;
if (!n) return cout<<"0",void();
for (ll i=1;i<=n;i++)
// scanf("%lld%lld%lld",&d[i].x,&d[i].y,&d[i].z),
d[i]={rnd(0,a-1),rnd(0,b-1),rnd(0,c-1)},
mp[d[i]]=i;
nm=m=n;
for (ll i=1;i<=n;i++) {
go(d[i].x,d[i].y,d[i].z) if (chk(x,y,z)) d[++m]={x,y,z};
for (ll x:{0ll,d[i].x,a-1}) for (ll y:{0ll,d[i].y,b-1}) for (ll z:{0ll,d[i].z,c-1}) d[++m]={x,y,z};
}
sort(d+1,d+m+1),m=unique(d+1,d+m+1)-1-d;
for (ll i=1;i<=m;i++) {
if (!mp[d[i]]) mp[d[i]]=++nm;
mm[i]=mp[d[i]];
}
D.ini(m);
cerr<<clock()<<"\n";
for (ll o=0;o<3;o++) solve(o);
for (ll i=n+1;i<=m;i++) ans+=D.fnd(i)==i;
cout<<ans;
}
bool ORY; int main() {
// while (1)
// int t; for (scanf("%d",&t);t--;)
mian();
cerr<<"\n"<<abs(&MEM-&ORY)/1048576<<"MB";
return 0;
}
詳細信息
Test #1:
score: 0
Wrong Answer
time: 841ms
memory: 157916kb
input:
2 2 2 4 0 0 0 1 1 0 1 0 1 0 1 1
output:
1
result:
wrong answer 1st lines differ - expected: '4', found: '1'