#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
int n;
struct point
{
ll x,y,ang,poz;
} v[100005];
bool byang(int q, int t)
{
point a=v[q];
point b=v[t];
if(a.y*b.x!=a.x*b.y)
return a.y*b.x<a.x*b.y;
return a.x<b.x;
}
bool iseq(point A, point B)
{
return A.x==B.x&&A.y==B.y;
}
bool intersect(point A, point B, point C)
{
if(iseq(A,C)||iseq(B,C))
return 1;
ll a1=B.y-A.y;
ll b1=A.x-B.x;
ll c1=-a1*A.x-b1*A.y;
ll a2=C.y;
ll b2=-C.x;
ll c2=0;
ld coef=a2*b1-a1*b2;
if(coef==0)
return 0;
ld y=ld(-a2*c1)/coef;
ld x=ld(-b2*y)/a2;
if(x<=C.x&&y<=C.y&&x>0&&y>0)
return 1;
return 0;
}
bool bylin(int q,int t)
{
point a=v[q];
int nxt=q+1;
if(nxt>n)
nxt=1;
point b=v[nxt];
point c=v[t];
nxt=t+1;
if(nxt>n)
nxt=1;
point d=v[nxt];
bool isC=intersect(a,b,c);
bool isD=intersect(a,b,d);
if(isC==0&&isD==0)
return 0;
if(isC==1&&isD==1)
return 1;
bool isA=intersect(c,d,a);
bool isB=intersect(c,d,b);
if(isA==0&&isB==0)
return 1;
if(isA==1&&isB==1)
return 0;
return 0;
}
int fst[100005];
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>v[i].x>>v[i].y;
v[i].poz=i;
}
vector<int> ind;
for(int i=1;i<=n;i++)
ind.push_back(i);
sort(ind.begin(),ind.end(),byang);
int nr=0;
for(int i=0;i<ind.size();i++)
{
if(i==0)
nr++;
else
{
point a=v[ind[i-1]];
point b=v[ind[i]];
if(a.y*b.x!=a.x*b.y)
nr++;
}
v[ind[i]].ang=nr;
}
ind.clear();
for(int i=1;i<=n;i++)
ind.push_back(i);
sort(ind.begin(),ind.end(),bylin);
for(int i:ind)
{
int st=v[i].ang;
int nxt=i+1;
if(nxt>n)
nxt=1;
int dr=v[nxt].ang;
if(st>dr)
swap(st,dr);
for(int j=st;j<=dr;j++)
if(fst[j]==0)
fst[j]=i;
}
vector<int> sol;
for(int i=1;i<=n;i++)
{
int ang=v[i].ang;
//cout<<fst[ang]<<' ';
int prv=i-1;
if(i==1)
prv=n;
if(fst[ang]!=i&&fst[ang]!=prv)
continue;
sol.push_back(i);
}
sort(sol.begin(),sol.end());
cout<<sol.size()<<'\n';
for(int i:sol)
cout<<i<<' ';
return 0;
}
Compilation message
circuit.cpp: In function 'bool intersect(point, point, point)':
circuit.cpp:34:8: warning: unused variable 'c2' [-Wunused-variable]
34 | ll c2=0;
| ^~
circuit.cpp: In function 'int main()':
circuit.cpp:90:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
90 | for(int i=0;i<ind.size();i++)
| ~^~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
212 KB |
Output isn't correct |
2 |
Correct |
1 ms |
340 KB |
Output is correct |
3 |
Runtime error |
2 ms |
724 KB |
Execution killed with signal 11 |
4 |
Runtime error |
2 ms |
724 KB |
Execution killed with signal 11 |
5 |
Incorrect |
39 ms |
724 KB |
Output isn't correct |
6 |
Incorrect |
22 ms |
760 KB |
Output isn't correct |
7 |
Incorrect |
69 ms |
1168 KB |
Output isn't correct |
8 |
Incorrect |
20 ms |
596 KB |
Output isn't correct |
9 |
Correct |
29 ms |
716 KB |
Output is correct |
10 |
Incorrect |
21 ms |
784 KB |
Output isn't correct |
11 |
Runtime error |
26 ms |
1472 KB |
Execution killed with signal 6 |
12 |
Correct |
34 ms |
1152 KB |
Output is correct |
13 |
Execution timed out |
133 ms |
1624 KB |
Time limit exceeded |
14 |
Execution timed out |
135 ms |
3540 KB |
Time limit exceeded |
15 |
Correct |
97 ms |
2344 KB |
Output is correct |
16 |
Execution timed out |
212 ms |
4352 KB |
Time limit exceeded |
17 |
Execution timed out |
1078 ms |
4356 KB |
Time limit exceeded |
18 |
Runtime error |
18 ms |
6740 KB |
Execution killed with signal 11 |
19 |
Runtime error |
24 ms |
6712 KB |
Execution killed with signal 11 |
20 |
Execution timed out |
1070 ms |
4144 KB |
Time limit exceeded |