Submission #529049

#TimeUsernameProblemLanguageResultExecution timeMemory
529049penguinhackerKućice (COCI21_kucice)C++14
110 / 110
76 ms364 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define ar array

struct Point {
	ll x, y;
	Point operator-(const Point& o) const {
		return {x-o.x, y-o.y};
	}
	ll operator*(const Point& o) const {
		return x*o.y-y*o.x;
	}
};

const int mxN=1000, M=1e9+7;
int n, p2[mxN+1];
Point a[mxN], b[2*mxN];
ll ans;

void solve() {
	sort(b, b+n-1, [](Point x, Point y) {
		int tx=(x.y>0||x.x>0&&x.y==0)?1:2;
		int ty=(y.y>0||y.x>0&&y.y==0)?1:2;
		return tx!=ty?tx<ty:x*y>0;
	});
	for (int i=0; i<n-1; ++i)
		b[i+n-1]=b[i];
	ans=(ans+p2[n]-1)%M;
	for (int i=0, j=0; i<n-1; ++i) {
		j=max(j, i);
		while(j+1<i+n-1&&b[i]*b[j+1]>0)
			++j;
		ans=(ans-p2[j-i]+M)%M;
	}
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> n;
	for (int i=0; i<n; ++i)
		cin >> a[i].x >> a[i].y;
	p2[0]=1;
	for (int i=1; i<=n; ++i)
		p2[i]=p2[i-1]*2%M;
	for (int i=0; i<n; ++i) {
		for (int j=0; j<n; ++j)
			if (i!=j)
				b[j-(j>i)]=a[j]-a[i];
		solve();
	}
	cout << ans;
	return 0;
}

Compilation message (stderr)

Main.cpp: In lambda function:
Main.cpp:24:23: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
   24 |   int tx=(x.y>0||x.x>0&&x.y==0)?1:2;
      |                  ~~~~~^~~~~~~~
Main.cpp:25:23: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
   25 |   int ty=(y.y>0||y.x>0&&y.y==0)?1:2;
      |                  ~~~~~^~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...