結果
問題 | No.966 引き算をして門松列(その1) |
ユーザー |
|
提出日時 | 2020-01-13 21:56:36 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 7 ms / 2,000 ms |
コード長 | 5,726 bytes |
コンパイル時間 | 961 ms |
コンパイル使用メモリ | 100,668 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-12-23 00:36:01 |
合計ジャッジ時間 | 1,478 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 5 |
ソースコード
#define DEBUG 1#include <algorithm>#include <bitset>#include <cassert>#include <cmath>#include <cstring>#include <deque>#include <functional>#include <iomanip>#include <iostream>#include <map>#include <queue>#include <set>#include <stack>#include <string>#include <tuple>#include <utility>#include <vector>using namespace std;using ll = long long;using ull = unsigned long long;using ld = long double;using vll = vector<ll>;using vvll = vector<vll>;using pll = pair<ll, ll>;using vpll = vector<pll>;using vvpll = vector<vpll>;using tll = tuple<ll, ll, ll>;using vtll = vector<tll>;using vvtll = vector<vtll>;#define all(v) (v).begin(), (v).end()#define for1(i, n) for (ll i = 0; i < (n); i++)#define for2(i, m, n) for (ll i = (m); i < (n); i++)#define for3(i, m, n, d) for (ll i = (m); i < (n); i += (d))#define rfor2(i, m, n) for (ll i = (m); i > (n); i--)#define rfor3(i, m, n, d) for (ll i = (m); i > (n); i += (d))#define PI 3.1415926535897932384626433832795028841971693993751L#define INF 1111111111111111111LL#define print(...) print_1(__VA_ARGS__)#define in(...) in_1(__VA_ARGS__)#if DEBUG#define dump(...) dump_1(#__VA_ARGS__, __VA_ARGS__)#define dumpa(...) dumpa_1(#__VA_ARGS__, __VA_ARGS__)#else#define dump(...)#define dumpa(...)#endiftemplate <typename Head>void dump_1(const char* str, Head&& h){cerr << str << ": " << h << '\n';}template <typename Head, typename... Tail>void dump_1(const char* str, Head&& h, Tail&&... t){while (*str != ',') {cerr << *str++;}cerr << ": " << h << ' ';dump_1(str + 1, t...);}template <typename T>void dumpa_1(const char* str, const T v[], const ll size){while (*str != ',') {cerr << *str++;}cerr << ": ";for1 (i, size) {if (i != 0) {cerr << ' ';}cerr << v[i];}cerr << '\n';}template <typename T1, typename T2>ostream& operator<<(ostream& os, const pair<T1, T2>& v){os << v.first << ' ' << v.second;return os;}template <typename T1, typename T2, typename T3>ostream& operator<<(ostream& os, const tuple<T1, T2, T3>& v){os << get<0>(v) << ' ' << get<1>(v) << ' ' << get<2>(v);return os;}template <typename T>ostream& operator<<(ostream& os, const vector<T>& v){for (auto it = v.begin(); it != v.end(); it++) {if (it != v.begin()) {os << ' ';}os << *it;}return os;}template <typename T>ostream& operator<<(ostream& os, const set<T>& v){for (auto it = v.begin(); it != v.end(); it++) {if (it != v.begin()) {os << ' ';}os << *it;}return os;}template <typename T>ostream& operator<<(ostream& os, const multiset<T>& v){for (auto it = v.begin(); it != v.end(); it++) {if (it != v.begin()) {os << ' ';}os << *it;}return os;}template <typename T1, typename T2>ostream& operator<<(ostream& os, const map<T1, T2>& v){os << '{';for (auto it = v.begin(); it != v.end(); it++) {if (it != v.begin()) {os << ", ";}os << it->first << ':' << it->second;}os << '}';return os;}void Yes(void) { cout << "Yes\n"; }void No(void) { cout << "No\n"; }void YES(void) { cout << "YES\n"; }void NO(void) { cout << "NO\n"; }template <typename T>bool chmax(T& a, const T& b){if (a < b) {a = b;return true;}return false;}template <typename T>bool chmin(T& a, const T& b){if (a > b) {a = b;return true;}return false;}template <typename T>void vin(vector<T>& v, ll len){for1 (i, len) {cin >> v[i];}}template <typename Head>void in_1(Head& h){cin >> h;}template <typename Head, typename... Tail>void in_1(Head& h, Tail&... t){cin >> h;in_1(t...);}template <typename Head>void print_1(Head&& h){cout << h << '\n';}template <typename Head, typename... Tail>void print_1(Head&& h, Tail&&... t){cout << h << ' ';print_1(t...);}//---------------------------------------------------------void solve1(ll t){vll a(3);vin(a, 3);if (a[0] <= 0 or a[1] <= 0 or a[2] <= 0) {print(-1);return;}if (a[0] < a[1] and a[1] > a[2]) {if (a[0] != a[2]) {print(0);}else if (a[0] != 1) {print(1);}else {print(-1);}return;}if (a[0] > a[1] and a[1] < a[2]) {if (a[0] != a[2]) {print(0);}else if (a[0] - 1 != a[1]) {print(1);}else if (a[1] >= 2) {print(2);}else {print(-1);}return;}if (a[0] == a[1] and a[1] == a[2]) {if (a[0] >= 3) {print(3);}else {print(-1);}return;}sort(all(a));ll ans = INF;// a[2] を下げる場合if ((a[1] > 1) and (a[0] != a[1] - 1)) {chmin(ans, a[2] - a[1] + 1);}else if ((a[1] > 2) and (a[0] != a[1] - 2)) {chmin(ans, a[2] - a[1] + 2);}// a[1] を下げる場合if (a[0] > 1) {chmin(ans, a[1] - a[0] + 1);}if (ans == INF) {ans = -1;}print(ans);}void solve(){ll t;in(t);for1 (i, t) {solve1(i);}}//---------------------------------------------------------int main(){ios::sync_with_stdio(false);cin.tie(0);cout << fixed << setprecision(16);cerr << fixed << setprecision(16);solve();}