Submission #994642

#TimeUsernameProblemLanguageResultExecution timeMemory
994642jonathanirvingsPortal (BOI24_portal)C++17
100 / 100
31 ms3576 KiB
//start of jonathanirvings' template v3.0.3 (BETA) #include <bits/stdc++.h> using namespace std; // typedef long long LL; typedef long long LL; typedef pair<int,int> pii; typedef pair<LL,LL> pll; typedef pair<string,string> pss; typedef vector<int> vi; typedef vector<vi> vvi; typedef vector<pii> vii; typedef vector<LL> vl; typedef vector<vl> vvl; double EPS = 1e-9; int INF = 1000000005; long long INFF = 1000000000000000005LL; double PI = acos(-1); int dirx[8] = {-1,0,0,1,-1,-1,1,1}; int diry[8] = {0,1,-1,0,-1,1,-1,1}; #ifdef TESTING #define DEBUG fprintf(stderr,"====TESTING====\n") #define VALUE(x) cerr << "The value of " << #x << " is " << x << endl #define debug(...) fprintf(stderr, __VA_ARGS__) #else #define DEBUG #define VALUE(x) #define debug(...) #endif #define FOR(a,b,c) for (int (a)=(b);(a)<(c);++(a)) #define FORN(a,b,c) for (int (a)=(b);(a)<=(c);++(a)) #define FORD(a,b,c) for (int (a)=(b);(a)>=(c);--(a)) #define FORSQ(a,b,c) for (int (a)=(b);(a)*(a)<=(c);++(a)) #define FORC(a,b,c) for (char (a)=(b);(a)<=(c);++(a)) #define FOREACH(a,b) for (auto &(a) : (b)) #define REP(i,n) FOR(i,0,n) #define REPN(i,n) FORN(i,1,n) #define MAX(a,b) a = max(a,b) #define MIN(a,b) a = min(a,b) #define SQR(x) ((LL)(x) * (x)) #define RESET(a,b) memset(a,b,sizeof(a)) #define fi first #define se second #define mp make_pair #define pb push_back #define ALL(v) v.begin(),v.end() #define ALLA(arr,sz) arr,arr+sz #define SIZE(v) (int)v.size() #define SORT(v) sort(ALL(v)) #define REVERSE(v) reverse(ALL(v)) #define SORTA(arr,sz) sort(ALLA(arr,sz)) #define REVERSEA(arr,sz) reverse(ALLA(arr,sz)) #define PERMUTE next_permutation #define TC(t) while(t--) inline string IntToString(LL a){ char x[100]; sprintf(x,"%lld",a); string s = x; return s; } inline LL StringToInt(string a){ char x[100]; LL res; strcpy(x,a.c_str()); sscanf(x,"%lld",&res); return res; } inline string GetString(void){ char x[1000005]; scanf("%s",x); string s = x; return s; } inline string uppercase(string s){ int n = SIZE(s); REP(i,n) if (s[i] >= 'a' && s[i] <= 'z') s[i] = s[i] - 'a' + 'A'; return s; } inline string lowercase(string s){ int n = SIZE(s); REP(i,n) if (s[i] >= 'A' && s[i] <= 'Z') s[i] = s[i] - 'A' + 'a'; return s; } inline void OPEN (string s) { #ifndef TESTING freopen ((s + ".in").c_str (), "r", stdin); freopen ((s + ".out").c_str (), "w", stdout); #endif } //end of jonathanirvings' template v3.0.3 (BETA) using big = __int128; using pbb = pair<big,big>; big abs(big x) { if (x < 0) return -x; return x; } big gcd(big a,big b) { if (b == 0) return a; return gcd(b,a%b); } int n; // pll awal; // pll dat[100005]; pbb awal; pbb dat[100005]; // void normalize(pll &a, pll &b) void normalize(pbb &a, pbb &b) { if (a.fi < 0) { a.fi *= -1; a.se *= -1; } if (b.fi < 0) { b.fi *= -1; b.se *= -1; } if (b.fi == 0) return; // LL mul = a.fi / b.fi; big mul = a.fi / b.fi; a.fi -= b.fi * mul; a.se -= b.se * mul; normalize(b,a); } int main() { scanf("%d",&n); --n; { pll tmp; scanf("%lld %lld",&tmp.fi,&tmp.se); awal = mp(tmp.fi,tmp.se); } // scanf("%lld %lld",&awal.fi,&awal.se); REP(i,n) { { pll tmp; scanf("%lld %lld",&tmp.fi,&tmp.se); dat[i] = mp(tmp.fi,tmp.se); } // scanf("%lld %lld",&dat[i].fi,&dat[i].se); dat[i].fi -= awal.fi; dat[i].se -= awal.se; } FOR(i,1,n) { if (dat[i].fi == 0) continue; if (dat[0].fi == 0) swap(dat[0],dat[i]); else { normalize(dat[0],dat[i]); if (dat[i].fi != 0) swap(dat[0],dat[i]); } } // LL g = 0; big g = 0; FOR(i,1,n) { assert(dat[i].fi == 0); if (g != 0 || dat[i].se != 0) g = gcd(g,abs(dat[i].se)); } if (g == 0) puts("-1"); else if (dat[0].fi == 0) puts("-1"); else printf("%lld\n",(LL)abs(g * dat[0].fi)); }

Compilation message (stderr)

Main.cpp: In function 'std::string uppercase(std::string)':
Main.cpp:34:29: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   34 | #define FOR(a,b,c) for (int (a)=(b);(a)<(c);++(a))
      |                             ^
Main.cpp:40:18: note: in expansion of macro 'FOR'
   40 | #define REP(i,n) FOR(i,0,n)
      |                  ^~~
Main.cpp:80:3: note: in expansion of macro 'REP'
   80 |   REP(i,n) if (s[i] >= 'a' && s[i] <= 'z') s[i] = s[i] - 'a' + 'A';
      |   ^~~
Main.cpp: In function 'std::string lowercase(std::string)':
Main.cpp:34:29: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   34 | #define FOR(a,b,c) for (int (a)=(b);(a)<(c);++(a))
      |                             ^
Main.cpp:40:18: note: in expansion of macro 'FOR'
   40 | #define REP(i,n) FOR(i,0,n)
      |                  ^~~
Main.cpp:86:3: note: in expansion of macro 'REP'
   86 |   REP(i,n) if (s[i] >= 'A' && s[i] <= 'Z') s[i] = s[i] - 'A' + 'a';
      |   ^~~
Main.cpp: In function 'int main()':
Main.cpp:34:29: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   34 | #define FOR(a,b,c) for (int (a)=(b);(a)<(c);++(a))
      |                             ^
Main.cpp:40:18: note: in expansion of macro 'FOR'
   40 | #define REP(i,n) FOR(i,0,n)
      |                  ^~~
Main.cpp:151:3: note: in expansion of macro 'REP'
  151 |   REP(i,n)
      |   ^~~
Main.cpp:34:29: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   34 | #define FOR(a,b,c) for (int (a)=(b);(a)<(c);++(a))
      |                             ^
Main.cpp:162:3: note: in expansion of macro 'FOR'
  162 |   FOR(i,1,n)
      |   ^~~
Main.cpp:34:29: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   34 | #define FOR(a,b,c) for (int (a)=(b);(a)<(c);++(a))
      |                             ^
Main.cpp:174:3: note: in expansion of macro 'FOR'
  174 |   FOR(i,1,n)
      |   ^~~
Main.cpp:143:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  143 |   scanf("%d",&n);
      |   ~~~~~^~~~~~~~~
Main.cpp:147:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  147 |     scanf("%lld %lld",&tmp.fi,&tmp.se);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:155:12: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  155 |       scanf("%lld %lld",&tmp.fi,&tmp.se);
      |       ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...