Single Round Match 477 Round 1 - Division I, Level Two PythTriplets
2014-11-11 22:53
375 查看
考虑a,b的奇偶性。
若a,b同时是偶数,gcd(a,b)!=1;
若a,b同时是奇数,(2*k1+1)^2+(2*k2+1)^2=4(k1^2+k2^2+k1+k2)+2,等式右边是一个偶数,那么必然为一个偶数的平方,但是一个偶数的平方必然能被4整除。
故a,b必然一奇一偶,构造二分图求最大匹配即可。
若a,b同时是偶数,gcd(a,b)!=1;
若a,b同时是奇数,(2*k1+1)^2+(2*k2+1)^2=4(k1^2+k2^2+k1+k2)+2,等式右边是一个偶数,那么必然为一个偶数的平方,但是一个偶数的平方必然能被4整除。
故a,b必然一奇一偶,构造二分图求最大匹配即可。
#include <bits/stdc++.h> #define maxn 3009 using namespace std; int cx[maxn],cy[maxn],vis[maxn],lable,n; char s[1000009]; vector<int>G[maxn]; int gcd(int a,int b) { return b?gcd(b,a%b):a; } int dfs(int u) { for(int i=0;i<(int)G[u].size();i++) { int v=G[u][i]; if(vis[v]!=lable) { vis[v]=lable; if(cy[v]==-1||dfs(cy[v])) { cx[u]=v; cy[v]=u; return 1; } } } return 0; } int match() { memset(cx,-1,sizeof(cx)); memset(cy,-1,sizeof(cy)); memset(vis,0,sizeof(vis)); lable=0; int res=0; for(int i=0;i<n;i++) { if(cx[i]==-1) { lable++; res+=dfs(i); } } return res; } class PythTriplets { public:int findMax(vector <string> stick) { vector<int>a,X,Y; string S=""; for(int i=0;i<(int)stick.size();i++) { S+=stick[i]; } for(int i=0;i<(int)S.length();i++) s[i]=S[i]; char *p=strtok(s," "); a.push_back(atoi(p)); while(p) { a.push_back(atoi(p)); p=strtok(NULL," "); } for(int i=0;i<(int)a.size();i++) { if(a[i]%2==1) X.push_back(a[i]); else Y.push_back(a[i]); } for(int i=0;i<(int)X.size();i++) { for(int j=0;j<(int)Y.size();j++) { if(gcd(X[i],Y[j])!=1) continue; long long x=X[i],y=Y[j]; long long z=round(sqrt(x*x+y*y)); if(z*z!=x*x+y*y) continue; G[i].push_back(j); } } n=X.size(); return match(); } };
相关文章推荐
- Single Round Match 464 Round 1 - Division I, Level Two ColorfulDecoration
- Member Single Round Match 465 Round 1 - Division I, Level Two GreenWarfareze
- Single Round Match 480 Round 1 - Division I, Level Two NetworkSecurity
- Single Round Match 506 Round 1 - Division I, Level Two SlimeXGrandSlimeAuto
- Single Round Match 524 Round 1 - Division I, Level Two LongestSequence
- Member Single Round Match 461 Round 1 - Division I, Level Two BuildingCities
- Single Round Match 573 Round 1 - Division I, Level Two SkiResorts
- Single Round Match 508 Round 1 - Division I, Level Two YetAnotherORProblem
- Single Round Match 479 Round 1 - Division I, Level Two TheAirTripDivOne
- Single Round Match 462 Round 1 - Division I, Level Three WarTransportation
- Single Round Match 517 Round 1 - Division I, Level Two AdjacentSwaps
- 2012 TCO Algorithm Round 3A - Division I, Level Two FoxAndCake
- topcoder Single Round Match 457 Round 1 - Division I, Level Two baTheHexagonsDivOne
- Member Single Round Match 474 Round 1 - Division I, Level Two TreesCount
- 2010 TCO Algorithm Online Round 5 - Division I, Level Two LongJourney
- Topcoder Single Round Match 453.5 Round 1 - Division I, Level Two TheProduct
- Single Round Match
- Sicily 1790. Single Round Match
- Member Single Round Match 501
- Single Round Match 498