Submission #19798

#TimeUsernameProblemLanguageResultExecution timeMemory
19798mitslll창문 (kriii4_C)C++98
100 / 100
0 ms1716 KiB
#include<cstdio> #include<iostream> #include<string> #include<vector> using namespace std; typedef unsigned long long ull; ull gcd(ull a, ull b){ return ( a % b == 0 ) ? b : gcd(b, a % b); } const ull mod = 1000000007; struct Solution { ull gcd, x, y; Solution(ull gcd, ull x, ull y) :gcd(gcd), x(x), y(y) { } }; Solution extendedEuclid(ull a, ull b) { ull q = a / b, r = a % b; if(r == 0) return Solution(b, 0, 1); Solution s = extendedEuclid(b, r); // now, we have // s.gcd = s.x * b + s.y * r // = s.x * b + s.y * (a - q * b) // = s.y * a + (s.x - q * s.y) * b return Solution(s.gcd, s.y, s.x - q * s.y); } int main(){ ull h, w; cin >> h>> w; ull bot = 1; ull g; h = h+2; w= w+2; g= gcd(h, bot); bot /= g; h /= g; g = gcd(w, bot); w/= g; bot /= g; h %= mod; w %= mod; ull top = ( h * w ) % mod; ull rev = 1; if(bot != 1){ Solution sol = extendedEuclid(bot, mod); rev = sol.x + mod; } cout << ( top * rev ) % mod << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...