結果
問題 | No.1200 お菓子配り-3 |
ユーザー |
![]() |
提出日時 | 2020-08-29 16:06:03 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 1,695 ms / 4,000 ms |
コード長 | 1,469 bytes |
コンパイル時間 | 1,785 ms |
コンパイル使用メモリ | 172,112 KB |
実行使用メモリ | 6,824 KB |
最終ジャッジ日時 | 2024-11-20 22:58:05 |
合計ジャッジ時間 | 17,134 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 31 |
ソースコード
/*** @FileName a.cpp* @Author kanpurin* @Created 2020.08.29 16:05:53**/#include "bits/stdc++.h"using namespace std;typedef long long ll;template<typename T>vector<T> enum_div(T n) {vector<T> ret;for (T i = 1; i * i <= n; ++i){if (n % i == 0){ret.push_back(i);if (i * i != n){ret.push_back(n / i);}}}return ret;}int main() {int n;cin >> n;while(n--) {int x,y;scanf("%d %d",&x,&y);if (x == y) {ll ans = 0;ans += x - 1;ans += enum_div(x).size() - 1;if (x % 2 == 0) ans--;printf("%lld\n", ans);}else {if (x < y) swap(x,y);auto v1 = enum_div(x + y);sort(v1.begin(), v1.end());auto v2 = enum_div(x - y);sort(v2.begin(), v2.end());int t = 0;int ans = 0;for (int i = 0; i < v2.size(); i++) {while(t < v1.size() && v2[i] + 2 >= v1[t]) {if (v2[i] + 2 == v1[t]) {int a = v1[v1.size()-1] / v1[t];int b = v2[v2.size()-1] / v2[i];if (a > b && a % 2 == b % 2) ans++;}t++;}}printf("%d\n",ans);}}return 0;}