結果
問題 | No.1200 お菓子配り-3 |
ユーザー |
![]() |
提出日時 | 2020-09-01 18:51:01 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 3,865 ms / 4,000 ms |
コード長 | 2,122 bytes |
コンパイル時間 | 2,801 ms |
コンパイル使用メモリ | 201,856 KB |
最終ジャッジ日時 | 2025-01-14 03:06:26 |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 31 |
ソースコード
#include <bits/stdc++.h>#define rep(i,n) for(int i = 0; i < (n); ++i)#define srep(i,s,t) for (int i = s; i < t; ++i)#define drep(i,n) for(int i = (n)-1; i >= 0; --i)using namespace std;typedef long long int ll;typedef pair<int,int> P;#define yn {puts("YES");}else{puts("NO");}#define MAX_N 200005vector<pair<ll, int>> PrimeFactorInit(ll x){ // 素因数と個数のペアを返す.vector<pair<ll, int>> fac;if(x >= 2){for(ll i = 2; i <= x; i++){if(i * i > x)break;if(x % i == 0){int cnt = 0;while(x % i == 0){cnt++;x /= i;}pair<ll, int> p;p.first = i;p.second = cnt;fac.push_back(p);}}if(x > 1){pair<ll, int> p;p.first = x;p.second = 1;fac.push_back(p);}}return fac;}vector<ll> yakusuu_rekkyo(ll n){vector<ll> divisors;for(ll i = 1; i <= n; i++){if(i * i > n)break;if(i * i == n){divisors.push_back(i);break;}else if(n % i == 0){divisors.push_back(i);divisors.push_back(n/i);}}sort(divisors.begin(), divisors.end());return divisors;}int main() {int S;cin >> S;rep(_,S){ll x, y;cin >> x >> y;if(x < y) swap(x,y);ll z = x + y;vector<ll> v = yakusuu_rekkyo(z);int n = v.size();int ans = 0;rep(i,n){if(v[i] == 1) continue;ll a = v[i] - 1;if(a == 1){if(x != y)continue;ans += x - 1;}else{if((x-y)%(a-1)!=0) continue;ll c = z/v[i] + (x-y)/(a-1);ll d = z/v[i] - (x-y)/(a-1);if(c > 0 && c % 2 == 0 && d > 0 && d % 2 == 0){ans++;}}}cout << ans << endl;}return 0;}