# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
932573 |
2024-02-23T17:46:31 Z |
tminh_hk20 |
SIR (COI15_sir) |
C++14 |
|
122 ms |
32576 KB |
#include<bits/stdc++.h>
#define int long long
#define ii pair<int,int>
#define fi first
#define se second
using namespace std;
const int N = 6e5;
struct vec{
int x, y;
}a[N+10], b[N+10];
vec operator - (vec a, vec b){
return {a.x-b.x,a.y-b.y};
}
bool operator < (vec a, vec b){
if (a.x==b.x) return a.y<b.y;
return a.x<b.x;
}
int cross(vec a, vec b){
return a.x*b.y-b.x*a.y;
}
int n, m, c, s[N+10];
vector<vec> v;
void convexhull(){
sort(b+1,b+m+1);
//upper
v.push_back(b[1]);
for (int i=2;i<=m;i++){
while(v.size()>=2 && cross(b[i]-v[v.size()-1],v[v.size()-2]-v[v.size()-1])>0) v.pop_back();
v.push_back(b[i]);
}
// lower
for (int i=m-1;i>=2;i--){
while(v.size()>=2 && cross(b[i]-v[v.size()-1],v[v.size()-2]-v[v.size()-1])>0) v.pop_back();
v.push_back(b[i]);
}
}
bool ch(int i, int j){
int j2 = (j+1)%c;
int j3 = (j-1+c)%c;
return (cross(v[j]-a[i],v[j2]-a[i])<=0) && (cross(v[j]-a[i],v[j3]-a[i])<=0);
}
bool check(vec a,vec b,vec c){
return (b.x-a.x) *(c.y-a.y)-(c.x-a.x)*(b.y-a.y)>0;
}
int index(int i){
if (i%(n+1)==0) return n+1;
else return i%(n+1);
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin>> n; for (int i=1;i<=n;i++) cin>> a[i].x>>a[i].y;
cin>> m; for (int i=1;i<=m;i++) cin>> b[i].x>>b[i].y;
convexhull();
reverse(a+1,a+n+1);
for (int i=1;i<=2*n;i++) a[n+i] =a[i]; a[3*n+1] = a[1];
for (int i=1;i<=3*n;i++) s[i] = s[i-1]+ cross(a[i],a[i+1]);
int j =0; c = v.size();
for (int i=0;i<c;i++){
if (ch(0,i)){
// cout <<">>"<<i<<" "<<ch(0,i)<<endl;
j = i;
break;
}
}
// for (int i=1;i<=n;i++) cout <<"bg "<<a[i].x<<" "<<a[i].y<<endl;
// for (int i=0;i<c;i++) cout <<"sm "<<v[i].x<<" "<<v[i].y<<endl;
// for (int i=1;i<=n;i++) cout << s[i]<<" "; cout <<endl;
int res = 0;
int far = 2;
for (int i=1;i<=n;i++){
while(!ch(i,j)){
j++; j%=c;
}
while(cross(a[far]-a[i],v[j]-a[i])<=0){
int l = i, r = far;
if (l>r) swap(l,r);
// cout <<i<<" "<<j<<" "<<l<<" "<<r<<" "<<s[r-1]-s[l-1]<<" "<<cross(a[r],a[l])<<endl;
res = max(res, abs(s[r-1]-s[l-1]+cross(a[r],a[l])));
far++;
}
// cout <<">"<<i<<" "<<far%n<<endl;
}
cout <<res<<endl;
}
Compilation message
sir.cpp: In function 'int main()':
sir.cpp:70:5: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
70 | for (int i=1;i<=2*n;i++) a[n+i] =a[i]; a[3*n+1] = a[1];
| ^~~
sir.cpp:70:44: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
70 | for (int i=1;i<=2*n;i++) a[n+i] =a[i]; a[3*n+1] = a[1];
| ^
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
1 ms |
4440 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
4700 KB |
Output is correct |
2 |
Correct |
1 ms |
4700 KB |
Output is correct |
3 |
Correct |
2 ms |
4700 KB |
Output is correct |
4 |
Correct |
1 ms |
4444 KB |
Output is correct |
5 |
Incorrect |
1 ms |
4700 KB |
Output isn't correct |
6 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
122 ms |
32576 KB |
Output is correct |
2 |
Correct |
114 ms |
31540 KB |
Output is correct |
3 |
Correct |
107 ms |
31684 KB |
Output is correct |
4 |
Correct |
29 ms |
20052 KB |
Output is correct |
5 |
Incorrect |
89 ms |
28596 KB |
Output isn't correct |
6 |
Halted |
0 ms |
0 KB |
- |