Submission #1314947

#TimeUsernameProblemLanguageResultExecution timeMemory
1314947exoworldgdFlood (IOI07_flood)C++20
Compilation error
0 ms0 KiB
#pragma GCC optimize("O5,unroll-loops,inline,fast-math") #pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt") #include <bits/stdc++.h> #define exoworldgd cin.tie(0)->sync_with_stdio(0),cout.tie(0) #define int long long #define pii pair<int,int> using namespace std; const int inf=LLONG_MAX,mod=1e9+7,N=1e5+5,dx[]={1,0,-1,0},dy[]={0,-1,0,1}; int n,m,cnt=0,R; struct pt{ int x,y,c,r[4]; pii l[4]; pt(){c=-1,l[0]=l[1]=l[2]=l[3]={-1,-1},fill(r,r+4,-1);} }; vector<pt>pts; struct reg{ int t,a; vector<int> v; reg(){a=0,t=-1;} }; int d(int x,int y){return pts[x].y==pts[y].y?(pts[x].x<pts[y].x?0:2):(pts[x].y>pts[y].y?1:3);} void bfs(int x, int k) { queue<int> q; pts[x].c=k; for(q.push(x);q.size();q.pop()) { x=q.front(); for(int i=0;i<4;i++)if(pts[x].l[i].first^-1&&pts[pts[x].l[i].first].c==-1)pts[pts[x].l[i].first].c=k,q.push(pts[x].l[i].first); } } void tv(int i,int j,reg &rg,int id) { rg.v.push_back(i); for(int k;pts[i].r[j]==-1;){ pts[i].r[j]=id,k=pts[i].l[j].first,rg.a+=(pts[i].x-pts[k].x)*pts[i].y,rg.v.push_back(k),i=k; for(j=(j+3)%4;pts[i].l[j].first==-1;j=(j+1)%4); } rg.a=max(rg.a,-rg.a); } signed main(void) { exoworldgd; cin>>n; pt t; for(int i=0;i<n;i++)cin>>t.x>>t.y,pts.push_back(t); cin>>m; for(int i=0,a,b;i<m;i++)cin>>a>>b,a--,b--,pts[a].l[d(a,b)]={b,i},pts[b].l[d(b,a)]={a,i}; for(int i=0;i<n;i++)if(pts[i].c==-1)bfs(i,cnt++); vector<int> exr(cnt,-1),res; vector<reg> regs; for(int i=0;i<n;i++)for(int j=0;j<4;j++)if(pts[i].l[j].first^-1&&pts[i].r[j]==-1) { R=regs.size(),regs.push_back(reg()), tv(i,j,regs[R],R); int &ex=exr[pts[i].c]; if(ex==-1)ex=R; if(regs[R].a>regs[ex].a)ex=R; } queue<int> q; for(int i=0;i<cnt;i++)if(exr[i]^-1)regs[exr[i]].t=0,q.push(exr[i]); for(;q.size();q.pop()){ int x=q.front(); for(int i=1;i<regs[x].v.size();i++){ int a=regs[x].v[i],b=regs[x].v[i-1], s=pts[a].r[d(a,b)]; if(regs[s].t==-1)regs[s].t=regs[x].t+1,q.push(s); } } for(int a=0;a<n;a++)for(int i=0;i<4;i++) { int b=pts[a].l[i].first; if(!(b==-1||b<a)&&regs[pts[a].r[d(a,b)]].t==regs[pts[b].r[d(b,a)]].t)res.push_back(pts[a].l[i].second); } cout<<res.size()<<'\n'; for(int i:res)cout<<i+1<<'\n'; }

Compilation message (stderr)

In file included from /usr/include/c++/13/string:43,
                 from /usr/include/c++/13/bitset:52,
                 from /usr/include/x86_64-linux-gnu/c++/13/bits/stdc++.h:52,
                 from flood.cpp:3:
/usr/include/c++/13/bits/allocator.h: In destructor 'constexpr std::_Vector_base<pt, std::allocator<pt> >::_Vector_impl::~_Vector_impl()':
/usr/include/c++/13/bits/allocator.h:184:7: error: inlining failed in call to 'always_inline' 'constexpr std::allocator< <template-parameter-1-1> >::~allocator() noexcept [with _Tp = pt]': target specific option mismatch
  184 |       ~allocator() _GLIBCXX_NOTHROW { }
      |       ^
In file included from /usr/include/c++/13/vector:66,
                 from /usr/include/c++/13/functional:64,
                 from /usr/include/x86_64-linux-gnu/c++/13/bits/stdc++.h:53:
/usr/include/c++/13/bits/stl_vector.h:133:14: note: called from here
  133 |       struct _Vector_impl
      |              ^~~~~~~~~~~~