70分求助
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define PII pair<int,int>
#define tul tuple<int,int,int>
#define all(x) x.begin(),x.end()
#define cy cout<<"Yes"<<endl
#define cn cout<<"No"<<endl
#define lc rt<<1
#define rc rt<<1|1
const int N=3e5+6,yyx=998244353;
int n,m;
struct node{
int x,y;
friend node operator- (node a,node b){
return {a.x-b.x,a.y-b.y};
}
friend node operator+ (node a,node b){
return {a.x+b.x,a.y+b.y};
}
friend bool operator== (node a,node b){
if(a.x==0&&a.y==0||b.x==0&&b.y==0) return 1;
int d=__gcd(abs(a.x),abs(a.y)),m=__gcd(abs(b.x),abs(b.y));
return abs(a.x/d)==abs(b.x/m)&&abs(a.y/d)==abs(b.y/m)&&(a.x/d)*(a.y/d)==(b.x/m)*(b.y/m);
}
}e[N];
node toin(string &s){
int x=0,y=0;
for(int i=0;i<s.size();++i){
if(s[i]=='('){
int j=i+1;
while(j<s.size()&&isdigit(s[j])) j++;
if(!isdigit(s[j])) j--;
for(int k=i+1;k<=j;++k) x=x*10+s[k]-48;
}
if(s[i]==','){
int j=i+1;
while(j<s.size()&&isdigit(s[j])) j++;
if(!isdigit(s[j])) j--;
for(int k=i+1;k<=j;++k) y=y*10+s[k]-48;
}
}
return {x,y};
}
int check(int x,int y,node p){
node a=e[x],b=e[y];
node v1=p-a,v2=p-b;
int xx=max(a.x,b.x),yy=max(a.y,b.y);
int kx=min(a.x,b.x),ky=min(a.y,b.y);
//cout<<xx<<" "<<yy<<endl;
//cout<<kx<<" "<<ky<<endl;
return v1==v2&&p.x>=kx&&p.y>=ky&&p.y<=yy&&p.x<=xx;
}
inline void solve(){
string s[3];
for(int i=0;i<3;++i) cin>>s[i];
for(int i=1;i<=3;++i) e[i]=toin(s[i-1]);
string st;cin>>st;
node p=toin(st);
int x=p.x,y=p.y;
for(int i=1;i<=3;++i){
if(e[i].x==x&&e[i].y==y){
cout<<4<<endl;return;
}
}
//for(int i=1;i<=3;++i) cout<<e[i].x<<" "<<e[i].y<<endl;
node v1=p-e[1],v2=p-e[2],v3=p-e[3];
node b=v1+v2+v3;
if(b.x==0&&b.y==0) cout<<1<<endl;
else if(check(1,2,p)||check(2,3,p)||check(1,3,p)) cout<<3<<endl;
else cout<<2<<endl;
// node g={0,2},d={0,5};
// cout<<(g==d)<<endl;
}
signed main(){
cin.tie(0)->sync_with_stdio(0);
//freopen("D://321//in.txt","r",stdin);
//freopen("D://321//out.txt","w",stdout);
int _=1;
//cin>>_;
while(_--)
solve();
return 0;
}