QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#715204 | #7566. Interval Addition | DanielQOJ | AC ✓ | 1089ms | 10096kb | C++14 | 4.8kb | 2024-11-06 10:50:24 | 2024-11-06 10:50:25 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n, a[30];
int cf[30];
vector<int>vec[2];
vector<pair<int, int> > qwq[2];
int suf[2][30];
int run(int op, vector<int> p){
int s = 0;
for(int i = 0; i < p.size(); i++){
s += p[i] * suf[op][i];
}
return s;
}
vector<int> run_(int op, int s){
vector<int>p;
for(int i = 0; i < qwq[op].size(); i++){
p.emplace_back(s / suf[op][i]);
s %= suf[op][i];
}
return p;
}
bool ok(int x, int y){
vector<int>p1 = run_(1, x);
vector<int>p2 = run_(1, y);
for(int i = 0; i < qwq[1].size(); i++){
if(p1[i] > p2[i]){
return 0;
}
}
return 1;
}
vector<pair<int, int> > g;
void dfs(int pl, int val, int now){
if(pl == qwq[1].size()){
if(val)
g.emplace_back(make_pair(val, now));
return;
}
// dfs(pl + 1, val, now);
// dfs(pl + 1, val + vec[1][pl], now | (1ll<<pl));
for(int i = 0; i <= qwq[1][pl].first; i++){
dfs(pl + 1, val, now);
val += qwq[1][pl].second;
now += suf[1][pl];
}
}
int s[1<<24];
pair<int, int> get(int v){
int l = 0, r = (int)g.size() - 1, lans = -1, rans = g.size();
while(l <= r){
int mid = l+r>>1;
if(g[mid].first < v){
lans = mid;
l = mid + 1;
}else{
r = mid - 1;
}
}
if(lans == g.size() || g[lans+1].first != v){
return make_pair(-1,-1);
}
l = 0, r = (int)g.size() - 1;
while(l <= r){
int mid = l+r>>1;
if(g[mid].first > v){
rans = mid;
r = mid - 1;
}else{
l = mid + 1;
}
}
// cerr << v << ":" << lans << " " << rans << endl;
return make_pair(lans+1, rans-1);
}
unordered_map<int, int> vis[1<<15], dp[1<<15];
int get(int x, int y){
// if(!x && y)assert(0);
// if(!y && x)assert(0);
if(!x)return 0;
if(vis[x][y])return dp[x][y];
vis[x][y] = 1;
int ans = 1;
for(int i = x; ; i = (i-1) & x){
pair<int, int> res = get(s[i]);
if(res.first == -1){
if(!i)break;
continue;
}
for(int j = res.first; j <= res.second; j++){
if(ok(g[j].second,y))
ans = max(ans, get(x ^ i, y - g[j].second) + 1);
}
if(!i)break;
}
return dp[x][y] = ans;
}
int lowbit(int x){
return x & (-x);
}
signed main(){
// freopen("cloud.in", "r", stdin);
// freopen("cloud.out", "w", stdout);
cin >> n;
for(int i = 1; i <= n; i++){
cin >> a[i];
cf[i] = a[i] - a[i - 1];
}
cf[n + 1] = -a[n];
for(int i = 1; i <= n+1; i++){
if(cf[i] > 0)vec[1].emplace_back(cf[i]);
else if(cf[i] < 0)vec[0].emplace_back(-cf[i]);
}
sort(vec[0].begin(), vec[0].end());
sort(vec[1].begin(), vec[1].end());
// for(auto to : vec[0]){
// cerr << to << " ";
// }
// cerr << endl;
// for(auto to : vec[1]){
// cerr << to << " ";
// }
// cerr << endl;
cerr << "!" << endl;
if(vec[0].size() > vec[1].size())swap(vec[0], vec[1]);
for(int i = 0; i < vec[0].size(); i++){
int en = i;
while(en + 1 < vec[0].size() && vec[0][en] == vec[0][en + 1])en++;
qwq[0].emplace_back(en-i+1,vec[0][en]);
i = en;
}
for(int i = 0; i < vec[1].size(); i++){
int en = i;
while(en + 1 < vec[1].size() && vec[1][en] == vec[1][en + 1])en++;
qwq[1].emplace_back(en-i+1,vec[1][en]);
i = en;
}
// cerr << "!" << endl;
if(qwq[0].size())suf[0][(int)qwq[0].size()-1]=1;
for(int i = (int)(qwq[0].size())-2; i >= 0; i--){
suf[0][i] = suf[0][i + 1] * (qwq[0][i + 1].first+1);
}
if(qwq[1].size())suf[1][(int)qwq[1].size()-1]=1;
for(int i = (int)(qwq[1].size())-2; i >= 0; i--){
suf[1][i] = suf[1][i + 1] * (qwq[1][i + 1].first+1);
}
// cerr << qwq[0].size() << " " << qwq[1].size() << endl;
// cerr << "!!" << endl;
vector<int>man[2];
for(int i = 0; i < qwq[0].size(); i++){
man[0].emplace_back(qwq[0][i].first);
}
for(int i = 0; i < qwq[1].size(); i++){
man[1].emplace_back(qwq[1][i].first);
}
// cerr << "!" << endl;
dfs(0, 0, 0);
sort(g.begin(), g.end());
// for(auto [x, y] : g){
// cerr << x << " " << y <<endl;
// }
for(int i = 0; i < vec[0].size(); i++){
s[(1<<i)] = vec[0][i];
}
for(int i = 1; i < 1<<vec[0].size(); i++){
s[i] = s[i ^ lowbit(i)] + s[lowbit(i)];
}
int ans = get((1<<vec[0].size())-1, run(1,man[1]));
cout << vec[0].size() + vec[1].size() - ans << endl;
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 7640kb
input:
5 1 2 3 2 1
output:
3
result:
ok 1 number(s): "3"
Test #2:
score: 0
Accepted
time: 2ms
memory: 7256kb
input:
6 1 1 4 5 1 4
output:
4
result:
ok 1 number(s): "4"
Test #3:
score: 0
Accepted
time: 3ms
memory: 8756kb
input:
23 154867764 88416234 958556716 525347353 297126571 748390457 991684429 346718178 898503520 361211695 769645122 37543644 545129269 108357111 477091071 990326512 89442247 500865905 865261751 881423606 884862773 342044622 545846884
output:
23
result:
ok 1 number(s): "23"
Test #4:
score: 0
Accepted
time: 2ms
memory: 9212kb
input:
23 120512728 488581138 644845116 520600533 100830035 819227263 160270658 973159498 726973004 621205731 645066544 284705591 139812862 771961411 928673722 774153929 872014266 753699081 71306808 6052789 859500856 467237467 917534614
output:
23
result:
ok 1 number(s): "23"
Test #5:
score: 0
Accepted
time: 2ms
memory: 8920kb
input:
10 625630902 579967568 160371090 238722458 707634839 237285041 459491010 454916131 608704408 709619323
output:
10
result:
ok 1 number(s): "10"
Test #6:
score: 0
Accepted
time: 2ms
memory: 7796kb
input:
1 46422493
output:
1
result:
ok 1 number(s): "1"
Test #7:
score: 0
Accepted
time: 2ms
memory: 8980kb
input:
23 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000 499999953 499999953 499999953 499999953 499999953 499999953 499999953 499999953 500000000 500000000 500000000 500000000 500000000 500000000 500000000
output:
2
result:
ok 1 number(s): "2"
Test #8:
score: 0
Accepted
time: 0ms
memory: 7956kb
input:
23 500000011 500000011 500000026 500000026 500000026 500000026 500000026 500000026 500000026 500000045 500000045 500000015 500000015 500000015 500000015 500000000 500000096 500000041 500000041 500000041 500000096 500000096 500000000
output:
6
result:
ok 1 number(s): "6"
Test #9:
score: 0
Accepted
time: 2ms
memory: 8288kb
input:
23 500000000 500000000 500000066 500000073 500000073 500000182 500000182 500000087 500000169 500000169 500000133 500000133 500000035 500000035 499999871 499999865 499999865 499999865 500000154 500000072 500000072 500000096 500000000
output:
11
result:
ok 1 number(s): "11"
Test #10:
score: 0
Accepted
time: 754ms
memory: 9392kb
input:
23 499999858 499999791 499999811 499999854 499999847 499999769 499999893 499999791 499999757 499999924 500000215 500000063 499999986 500000146 499999907 500000007 499999789 499999985 499999874 499999884 500000008 499999922 499999917
output:
19
result:
ok 1 number(s): "19"
Test #11:
score: 0
Accepted
time: 2ms
memory: 9056kb
input:
23 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500006627 500006627 500006627 500006627 500006627 500006627 500006627 500006627 500000000 500000000
output:
2
result:
ok 1 number(s): "2"
Test #12:
score: 0
Accepted
time: 0ms
memory: 8284kb
input:
23 500000000 499991668 499991668 499991668 499991668 499991668 499992421 499992421 499992421 499992421 499992421 499992421 499992421 499991701 499991701 500007356 500007323 500007323 500007323 500007323 500007323 500007323 500006700
output:
6
result:
ok 1 number(s): "6"
Test #13:
score: 0
Accepted
time: 0ms
memory: 8464kb
input:
23 500008971 500007158 500007158 500007158 500007158 500007158 500016740 500016740 500023431 500029646 500031770 500025555 500025555 500025555 500025555 500020962 500011380 500014021 500011069 500012381 500009692 500005314 500005314
output:
11
result:
ok 1 number(s): "11"
Test #14:
score: 0
Accepted
time: 3ms
memory: 8824kb
input:
23 500004790 500011043 500001539 499988427 499989318 500002907 499992442 500000344 500013204 500032360 500022060 500005386 499989135 499995181 499970440 499974934 499970234 499985465 499988500 499997841 499978295 499995992 499985112
output:
21
result:
ok 1 number(s): "21"
Test #15:
score: 0
Accepted
time: 2ms
memory: 8312kb
input:
23 500000000 500000000 500775103 500775103 500775103 500775103 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000
output:
2
result:
ok 1 number(s): "2"
Test #16:
score: 0
Accepted
time: 0ms
memory: 8108kb
input:
23 500000000 500000000 500000000 499317985 499883344 499883344 499883344 499883344 499047944 499814976 499814976 499007908 498442549 498442549 498442549 499164600 499164600 499164600 499164600 500000000 500000000 500000000 500000000
output:
6
result:
ok 1 number(s): "6"
Test #17:
score: 0
Accepted
time: 2ms
memory: 8708kb
input:
23 500578170 501342629 500685333 500685333 500685333 500434440 500434440 500833302 500833302 500018930 500352528 500127753 500603421 501751304 501417793 500685333 500685333 499920874 500578170 500000000 500420306 500420306 500420306
output:
11
result:
ok 1 number(s): "11"
Test #18:
score: 0
Accepted
time: 2ms
memory: 7988kb
input:
23 501122407 505187190 506309930 504626086 504486924 505864777 505478791 504987294 506389246 504959954 503907177 503951359 504513755 503329719 502108244 500920912 502168527 499084052 499787444 501128474 502585881 500042621 498430594
output:
23
result:
ok 1 number(s): "23"
Test #19:
score: 0
Accepted
time: 0ms
memory: 7392kb
input:
23 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000 499999978 499999978 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000
output:
2
result:
ok 1 number(s): "2"
Test #20:
score: 0
Accepted
time: 2ms
memory: 9264kb
input:
23 500000000 500000000 499999924 499999924 499999952 499999952 500000028 499999983 499999983 500000069 500000069 500000069 500000069 500000069 500000148 500000148 500000069 500000069 500000069 500000000 500000000 500000000 500000000
output:
6
result:
ok 1 number(s): "6"
Test #21:
score: 0
Accepted
time: 3ms
memory: 8324kb
input:
23 500000000 499999969 499999929 499999929 499999779 499999747 499999747 499999747 499999667 499999707 499999930 499999891 499999891 499999881 499999881 499999845 499999925 499999925 499999964 499999964 499999904 499999964 500000000
output:
10
result:
ok 1 number(s): "10"
Test #22:
score: 0
Accepted
time: 1089ms
memory: 10096kb
input:
23 500000155 500000315 500000231 500000048 500000372 500000424 500000278 500000277 500000124 500000103 500000191 499999987 499999852 499999617 499999631 499999629 499999711 499999651 499999585 499999530 499999495 499999747 499999993
output:
19
result:
ok 1 number(s): "19"
Test #23:
score: 0
Accepted
time: 0ms
memory: 9036kb
input:
23 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500000000 500006119 500006119 500006119 500006119 500006119 500006119 500000000 500000000 500000000 500000000
output:
2
result:
ok 1 number(s): "2"
Test #24:
score: 0
Accepted
time: 2ms
memory: 7436kb
input:
23 500000000 499991623 499991623 499991623 499991623 499984295 499975156 499975156 499975156 499976321 499976321 499976321 499976321 499993837 499993837 499993837 500001165 500001165 500001165 500000000 500000936 500000936 500000936
output:
6
result:
ok 1 number(s): "6"
Test #25:
score: 0
Accepted
time: 0ms
memory: 7840kb
input:
23 500000000 500002755 500002755 500002067 500002067 500002067 500007059 500007132 500015950 500015950 500010958 499993925 499993925 499995224 499997138 500004895 500004895 499999276 499999276 499996521 500000841 500000841 500000000
output:
11
result:
ok 1 number(s): "11"
Test #26:
score: 0
Accepted
time: 0ms
memory: 7788kb
input:
23 500009706 500006191 499984915 500014440 500023321 500026011 500039936 500024527 500036349 500046344 500041663 500021759 500032357 500030712 500006508 500019971 500032469 500052348 500028446 500001617 500011492 500019408 500015211
output:
21
result:
ok 1 number(s): "21"
Test #27:
score: 0
Accepted
time: 2ms
memory: 7672kb
input:
23 500000000 500000000 500000000 499207037 499207037 499207037 499207037 499207037 499207037 499207037 499207037 499207037 499207037 499207037 499207037 499207037 499207037 499207037 499207037 499207037 499207037 499207037 499207037
output:
2
result:
ok 1 number(s): "2"
Test #28:
score: 0
Accepted
time: 1ms
memory: 7920kb
input:
23 500000000 500000000 499906417 499906417 499004628 498250213 498250213 498250213 498250213 498250213 498250213 498250213 498326320 498326320 498326320 499004628 499004628 499004628 499098211 499098211 500000000 500000000 500000000
output:
5
result:
ok 1 number(s): "5"
Test #29:
score: 0
Accepted
time: 2ms
memory: 9116kb
input:
23 500000000 499433731 498421805 498421805 498210823 498006549 498006549 498006549 498006549 498587939 498661850 498661850 498291442 498291442 498388735 499246254 500160887 500160887 500903970 501108244 501674513 500857519 500000000
output:
10
result:
ok 1 number(s): "10"
Test #30:
score: 0
Accepted
time: 0ms
memory: 8856kb
input:
23 498848100 495902575 495746206 496218670 495979695 497212048 498148282 498317731 497827244 497356221 496914395 491578419 489374599 490446554 488473546 490054662 493713401 493738233 495454097 496961762 497102961 498246670 499168534
output:
23
result:
ok 1 number(s): "23"
Test #31:
score: 0
Accepted
time: 0ms
memory: 7632kb
input:
23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 5 5 5
output:
1
result:
ok 1 number(s): "1"
Test #32:
score: 0
Accepted
time: 2ms
memory: 8540kb
input:
23 4 0 0 0 3 3 3 9 9 9 9 9 9 9 9 7 7 2 2 2 2 2 0
output:
5
result:
ok 1 number(s): "5"
Test #33:
score: 0
Accepted
time: 2ms
memory: 7772kb
input:
23 0 0 2 0 0 0 2 2 7 6 8 8 8 5 5 0 2 10 2 2 11 9 0
output:
8
result:
ok 1 number(s): "8"
Test #34:
score: 0
Accepted
time: 2ms
memory: 8792kb
input:
23 0 0 0 0 0 58 58 58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
output:
1
result:
ok 1 number(s): "1"
Test #35:
score: 0
Accepted
time: 0ms
memory: 8268kb
input:
23 0 0 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 0
output:
1
result:
ok 1 number(s): "1"
Test #36:
score: 0
Accepted
time: 2ms
memory: 8020kb
input:
23 0 26 0 0 0 0 12 12 0 17 17 25 25 25 49 0 0 21 0 0 0 0 0
output:
6
result:
ok 1 number(s): "6"
Test #37:
score: 0
Accepted
time: 2ms
memory: 9144kb
input:
23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 387 387 387 387 387 387
output:
1
result:
ok 1 number(s): "1"
Test #38:
score: 0
Accepted
time: 2ms
memory: 7676kb
input:
23 0 0 0 0 0 0 0 0 0 471 471 471 0 0 0 0 0 255 255 0 0 0 0
output:
2
result:
ok 1 number(s): "2"
Test #39:
score: 0
Accepted
time: 2ms
memory: 8220kb
input:
23 0 39 39 39 0 0 0 0 0 0 0 0 0 0 56 618 618 0 507 507 0 0 0
output:
4
result:
ok 1 number(s): "4"
Test #40:
score: 0
Accepted
time: 2ms
memory: 8572kb
input:
12 500000000 500000000 500000000 500000000 500000000 500000000 500000000 499999925 499999925 499999925 500000000 500000000
output:
2
result:
ok 1 number(s): "2"
Test #41:
score: 0
Accepted
time: 2ms
memory: 9224kb
input:
12 500000068 500000068 500000068 500000068 500000236 500000236 500000348 500000280 500000280 500000252 500000178 500000094
output:
6
result:
ok 1 number(s): "6"
Test #42:
score: 0
Accepted
time: 2ms
memory: 8948kb
input:
12 500000036 500000036 500000094 500000091 500000071 500000180 500000139 500000139 500000081 500000052 500000052 500000066
output:
8
result:
ok 1 number(s): "8"
Test #43:
score: 0
Accepted
time: 1ms
memory: 7836kb
input:
12 500000275 499999911 499999869 499999727 499999605 499999420 499999573 499999445 499999454 499999592 499999536 499999675
output:
11
result:
ok 1 number(s): "11"
Test #44:
score: 0
Accepted
time: 2ms
memory: 7368kb
input:
12 500000000 500000000 500000000 500000000 500000000 500000000 500000000 499993913 499993913 500000000 500000000 500000000
output:
2
result:
ok 1 number(s): "2"
Test #45:
score: 0
Accepted
time: 2ms
memory: 7328kb
input:
12 500006067 500006067 500006067 499999092 499999092 500004693 499998027 499992426 499985213 499993025 500000000 500000000
output:
6
result:
ok 1 number(s): "6"
Test #46:
score: 0
Accepted
time: 0ms
memory: 8288kb
input:
12 500000693 500008328 499994319 499994319 499994319 499988701 499995255 499995255 499996495 500003850 499996215 499996814
output:
8
result:
ok 1 number(s): "8"
Test #47:
score: 0
Accepted
time: 0ms
memory: 9340kb
input:
12 499995758 500029554 500038100 500105274 500056969 500051722 500049028 500006103 500002095 500008779 500012816 500004278
output:
12
result:
ok 1 number(s): "12"
Test #48:
score: 0
Accepted
time: 2ms
memory: 8348kb
input:
12 500000000 500808447 500808447 500808447 500808447 500000000 500000000 500000000 500000000 500000000 500000000 500000000
output:
2
result:
ok 1 number(s): "2"
Test #49:
score: 0
Accepted
time: 1ms
memory: 8136kb
input:
12 499754295 499754295 499754295 499519818 500429969 500664446 500774079 501489727 500579576 500469943 500469943 500000000
output:
6
result:
ok 1 number(s): "6"
Test #50:
score: 0
Accepted
time: 1ms
memory: 7976kb
input:
12 499117991 498271666 499225658 499225658 499487368 500063644 499528612 500410621 501005234 500204419 499960542 499789532
output:
10
result:
ok 1 number(s): "10"
Test #51:
score: 0
Accepted
time: 0ms
memory: 7916kb
input:
12 501960621 504050777 504603727 504435368 501735026 502850106 501772052 498494818 494609715 495382734 496351255 499241585
output:
12
result:
ok 1 number(s): "12"
Test #52:
score: 0
Accepted
time: 0ms
memory: 7932kb
input:
23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
output:
0
result:
ok 1 number(s): "0"