QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#529221 | #9221. Missing Boundaries | ucup-team008# | WA | 35ms | 6788kb | C++17 | 5.0kb | 2024-08-24 10:40:33 | 2024-08-24 10:40:34 |
Judging History
answer
#include <algorithm>
#include <array>
#include <bitset>
#include <cassert>
#include <chrono>
#include <complex>
#include <cstring>
#include <functional>
#include <iomanip>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <stack>
#include <unordered_map>
#include <vector>
using namespace std;
// BEGIN NO SAD
#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define trav(a, x) for(auto& a : x)
#define all(x) x.begin(), x.end()
#define sz(x) (int)(x).size()
#define mp make_pair
#define pb push_back
#define eb emplace_back
#define lb lower_bound
#define ub upper_bound
typedef vector<int> vi;
#define f first
#define s second
#define derr if(0) cerr
void __print(int x) {cerr << x;}
void __print(long x) {cerr << x;}
void __print(long long x) {cerr << x;}
void __print(unsigned x) {cerr << x;}
void __print(unsigned long x) {cerr << x;}
void __print(unsigned long long x) {cerr << x;}
void __print(float x) {cerr << x;}
void __print(double x) {cerr << x;}
void __print(long double x) {cerr << x;}
void __print(char x) {cerr << '\'' << x << '\'';}
void __print(const char *x) {cerr << '\"' << x << '\"';}
void __print(const string &x) {cerr << '\"' << x << '\"';}
void __print(bool x) {cerr << (x ? "true" : "false");}
template<typename T, typename V>
void __print(const pair<T, V> &x) {cerr << '{'; __print(x.first); cerr << ", "; __print(x.second); cerr << '}';}
template<typename T>
void __print(const T &x) {int f = 0; cerr << '{'; for (auto &i: x) cerr << (f++ ? ", " : ""), __print(i); cerr << "}";}
void _print() {cerr << "]\n";}
template <typename T, typename... V>
void _print(T t, V... v) {__print(t); if (sizeof...(v)) cerr << ", "; _print(v...);}
#define debug(x...) cerr << "\e[91m"<<__func__<<":"<<__LINE__<<" [" << #x << "] = ["; _print(x); cerr << "\e[39m" << flush;
// END NO SAD
template<class Fun>
class y_combinator_result {
Fun fun_;
public:
template<class T>
explicit y_combinator_result(T &&fun): fun_(std::forward<T>(fun)) {}
template<class ...Args>
decltype(auto) operator()(Args &&...args) {
return fun_(std::ref(*this), std::forward<Args>(args)...);
}
};
template<class Fun>
decltype(auto) y_combinator(Fun &&fun) {
return y_combinator_result<std::decay_t<Fun>>(std::forward<Fun>(fun));
}
template<class T>
bool updmin(T& a, T b) {
if(b < a) {
a = b;
return true;
}
return false;
}
template<class T>
bool updmax(T& a, T b) {
if(b > a) {
a = b;
return true;
}
return false;
}
typedef int64_t ll;
int getknown(array<int, 2>& v) {
if(v[0] >= 0) return v[0];
return v[1];
}
void rsolve() {
int n, maxv;
cin >> n >> maxv;
int unknown = 0;
vector<array<int, 2>> v;
while(n--) {
int a, b;
cin >> a >> b;
if(a == -1 && b == -1) unknown++;
else v.pb({a, b});
}
sort(all(v), [&](array<int, 2> a, array<int, 2> b) {
return getknown(a) < getknown(b);
});
// check consistency
vector<int> observe;
for(auto [a, b]: v) {
if(a != -1) observe.pb(a);
if(b != -1 && a != b) observe.pb(b);
}
for(int i = 1; i < sz(observe); i ++) {
if(observe[i] <= observe[i-1]) {
cout << "NIE\n";
return;
}
}
int lhs = 0;
int rhs = 0;
if(sz(v) == 0) {
lhs = 1;
rhs = maxv;
}
else {
// check left of zero
if(v[0][0] >= 0) {
if(v[0][0] > 1) lhs++;
rhs += v[0][0] - 1;
}
else {
assert(v[0][0] == -1);
rhs += v[0][1] - 1;
}
for(int i = 0; i + 1 < sz(v); i++) {
if(v[i][1] >= 0 && v[i+1][0] >= 0) {
// both sides known
// exact match
if(v[i][1] + 1 == v[i+1][0]) continue;
int gap = v[i+1][0] - v[i][1];
lhs++;
rhs += gap;
continue;
}
if(v[i][1] >= 0) {
// left side RHS known
// [a, b][?, c]
assert(v[i+1][0] == -1);
rhs += v[i+1][1] - v[i][1] - 1;
continue;
}
assert(v[i][1] == -1);
if(v[i+1][0] >= 0) {
// right side LHS known
rhs += v[i+1][0] - v[i][0] - 1;
continue;
}
assert(v[i][1] == -1 && v[i+1][0] == -1);
rhs += v[i+1][1] - v[i][0] - 1;
}
// check right of last one
if(v.back()[1] >= 0) {
if(v.back()[1] < maxv) lhs++;
rhs += maxv - v.back()[1];
}
else {
assert(v.back()[1] == -1);
rhs += maxv - v.back()[0];
}
}
if(lhs <= unknown && unknown <= rhs) {
cout << "TAK\n";
return;
}
cout << "NIE\n";
}
void solve() {
int t;
cin >> t;
while(t--) rsolve();
}
// what would chika do
// are there edge cases (N=1?)
// are array sizes proper (scaled by proper constant, for example 2* for koosaga tree)
// integer overflow?
// DS reset properly between test cases
// are you doing geometry in floating points
// are you not using modint when you should
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
solve();
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3856kb
input:
3 4 51 1 -1 11 50 -1 -1 -1 10 3 2 -1 -1 -1 -1 -1 -1 2 3 1 2 2 3
output:
TAK NIE NIE
result:
ok 3 lines
Test #2:
score: 0
Accepted
time: 35ms
memory: 6788kb
input:
1 200000 1000000000 490669427 -1 224278942 224287156 821104480 -1 861696576 861702036 807438935 807440055 574078002 574083717 465630141 -1 195378188 -1 -1 13500961 -1 977536179 92893115 -1 -1 661145418 -1 215804863 -1 685338515 544348999 -1 465532902 -1 130346949 -1 -1 526666304 635604584 635605404 ...
output:
TAK
result:
ok single line: 'TAK'
Test #3:
score: 0
Accepted
time: 0ms
memory: 3864kb
input:
3 4 51 1 -1 11 50 -1 -1 -1 10 3 2 -1 -1 -1 -1 -1 -1 2 3 1 2 2 3
output:
TAK NIE NIE
result:
ok 3 lines
Test #4:
score: 0
Accepted
time: 34ms
memory: 6244kb
input:
1 197838 400000 34167 34169 352180 -1 235963 -1 -1 -1 160401 160405 347288 -1 270353 270354 214502 214504 183243 183245 -1 -1 -1 36193 -1 -1 -1 17557 273498 273500 269137 -1 395099 395100 285515 285518 -1 -1 71041 71042 324060 -1 -1 385151 -1 379645 -1 -1 -1 185142 -1 191584 89259 89261 328347 32834...
output:
TAK
result:
ok single line: 'TAK'
Test #5:
score: 0
Accepted
time: 29ms
memory: 4832kb
input:
2 97340 150000 -1 101927 105937 -1 -1 107253 -1 47307 110550 -1 84061 84062 125176 125177 -1 15915 29617 -1 -1 -1 -1 43147 115958 -1 101807 101808 24866 -1 66826 66828 -1 31640 -1 5610 1281 1284 -1 -1 -1 -1 -1 73973 -1 2945 29064 -1 30653 -1 -1 63714 -1 -1 141389 141390 -1 27465 57358 -1 47388 47389...
output:
NIE NIE
result:
ok 2 lines
Test #6:
score: 0
Accepted
time: 31ms
memory: 4000kb
input:
4 50000 50000 11702 -1 -1 3148 30364 -1 48876 -1 -1 10739 -1 44459 11634 -1 39348 -1 38829 -1 16182 -1 37933 -1 35295 -1 43280 -1 37745 -1 -1 40076 358 -1 14043 -1 13975 -1 41942 -1 -1 13182 14780 -1 -1 14663 3998 -1 -1 24474 -1 6583 -1 9620 -1 37944 12103 -1 8307 -1 45760 -1 -1 2924 25441 -1 -1 194...
output:
TAK NIE NIE NIE
result:
ok 4 lines
Test #7:
score: 0
Accepted
time: 29ms
memory: 6312kb
input:
1 197884 400000 299276 299281 340251 -1 -1 350350 315166 -1 103436 103438 164740 164742 237539 -1 383864 -1 205194 -1 -1 -1 69029 69030 -1 -1 231837 231838 35835 35837 387743 -1 125024 -1 -1 -1 -1 -1 -1 -1 -1 283202 94212 94213 219223 219224 -1 -1 -1 139549 260062 -1 387170 387173 -1 328548 -1 -1 -1...
output:
NIE
result:
ok single line: 'NIE'
Test #8:
score: 0
Accepted
time: 25ms
memory: 4916kb
input:
2 97399 150000 -1 -1 97327 97328 94010 94011 72148 -1 -1 28604 -1 -1 139279 -1 -1 -1 67725 67726 93094 -1 -1 10828 37742 -1 69460 -1 -1 -1 -1 -1 80200 80202 126739 -1 131808 131810 -1 13390 -1 -1 141120 141121 127549 -1 -1 -1 -1 -1 66081 -1 100916 100918 -1 -1 25966 -1 47034 47036 101842 -1 -1 -1 -1...
output:
NIE NIE
result:
ok 2 lines
Test #9:
score: 0
Accepted
time: 30ms
memory: 4120kb
input:
4 50000 1000000000 218423429 -1 593054951 -1 345188314 -1 839833278 -1 -1 253444951 -1 532444671 -1 866445317 -1 476576639 -1 950754898 -1 735671066 71213664 -1 -1 363816338 -1 451093114 487349837 -1 -1 987865563 672130428 -1 -1 313206174 -1 311825154 -1 209018142 836501057 -1 -1 387134322 -1 939803...
output:
NIE NIE TAK NIE
result:
ok 4 lines
Test #10:
score: 0
Accepted
time: 24ms
memory: 4740kb
input:
2 97206 150000 41741 41742 -1 -1 29609 29610 -1 -1 94303 94305 67375 -1 84593 84597 -1 -1 97516 97517 -1 -1 110718 -1 129532 129533 -1 74454 -1 145160 118122 -1 -1 -1 -1 131430 -1 -1 77307 -1 -1 -1 35606 35607 -1 -1 77284 77286 84225 -1 82910 82911 55414 55418 -1 145197 -1 -1 -1 41997 41620 41621 16...
output:
NIE NIE
result:
ok 2 lines
Test #11:
score: 0
Accepted
time: 34ms
memory: 5952kb
input:
1 200000 1000000000 -1 -1 709526131 709534689 820094363 820094954 -1 558894593 253939639 253940489 755238142 -1 356834271 -1 720874328 -1 -1 797706622 -1 -1 877671011 877674221 9379767 9379808 152611373 -1 -1 584054839 -1 28003439 137254045 -1 -1 -1 -1 -1 -1 371861650 -1 -1 898245136 -1 610262985 61...
output:
TAK
result:
ok single line: 'TAK'
Test #12:
score: -100
Wrong Answer
time: 26ms
memory: 3640kb
input:
30000 6 9 -1 -1 -1 5 7 8 -1 2 -1 -1 3 -1 8 10 -1 -1 2 4 8 -1 -1 -1 3 6 2 10 -1 -1 -1 -1 5 10 7 -1 7 -1 -1 -1 -1 -1 -1 10 5 7 4 5 -1 -1 4 -1 -1 7 -1 4 9 10 -1 -1 -1 -1 8 9 9 -1 5 -1 -1 -1 -1 2 4 9 3 7 3 5 5 -1 3 3 -1 3 10 10 5 -1 1 3 -1 6 4 7 -1 5 2 -1 6 8 -1 9 7 -1 2 -1 1 6 3 -1 9 9 5 8 -1 4 1 3 8 9...
output:
TAK NIE NIE NIE NIE NIE NIE NIE NIE NIE TAK NIE NIE NIE NIE NIE NIE NIE TAK TAK TAK NIE NIE NIE NIE NIE NIE NIE TAK TAK NIE TAK NIE NIE NIE TAK NIE NIE NIE NIE NIE TAK NIE NIE NIE NIE NIE NIE TAK TAK NIE NIE NIE NIE NIE NIE TAK NIE TAK NIE NIE NIE NIE TAK NIE TAK NIE NIE TAK TAK NIE NIE TAK TAK NIE ...
result:
wrong answer 1190th lines differ - expected: 'NIE', found: 'TAK'