QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#189977#4428. Fenceberarchegas#AC ✓1017ms116860kbC++204.2kb2023-09-28 03:47:072023-09-28 03:47:08

Judging History

你现在查看的是最新测评结果

  • [2023-09-28 03:47:08]
  • 评测
  • 测评结果:AC
  • 用时:1017ms
  • 内存:116860kb
  • [2023-09-28 03:47:07]
  • 提交

answer

#include <bits/stdc++.h>
#include <iostream>
// #define int long long
#define ld long double
#define endl "\n"
#define fastio ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define pb push_back
#define mp(a,b) make_pair(a,b)
#define ms(v,x) memset(v,x,sizeof(v))
#define all(v) v.begin(),v.end()
#define ff first
#define ss second
#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define per(i, a, b) for(int i = b-1; i>=a ; i--)
#define trav(a, x) for(auto& a : x)
#define allin(a , x) for(auto a : x)
#define Unique(v) sort(all(v)),v.erase(unique(all(v)),v.end());
#define sz(v) ((int)v.size())
using namespace std;
typedef vector<int> vi;
#define y1 abacaba
//#define left oooooopss
#define db(x) cerr << #x <<" == "<<x << endl;
#define db2(x,y) cerr<<#x <<" == "<<x<<", "<<#y<<" == "<<y<<endl;
#define db3(x,y,z) cerr << #x<<" == "<<x<<", "<<#y<<" == "<<y<<", "<<#z<<" == "<<z<<endl;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef vector<ll> vl;
// std::mt19937_64 rng64((int) std::chrono::steady_clock::now().time_since_epoch().count());
std::mt19937 rng(
  
//  (int) std::chrono::steady_clock::now().time_since_epoch().count()
   1239010
);
ll cdiv(ll a, ll b) { return a/b+((a^b)>0&&a%b); } // divide a by b rounded up
ll fdiv(ll a, ll b) { return a/b-((a^b)<0&&a%b); } // divide a by b rounded down
//inline ll mod(ll n, ll m ){ ll ret = n%m; if(ret < 0) ret += m; return ret; }
ll gcd(ll a, ll b){return (b == 0LL ? a : gcd(b, a%b));}
ll exp(ll b,ll e,ll m){
    b%=m;
    ll ans = 1;
    for (; e; b = b * b % m, e /= 2)
        if (e & 1) ans = ans * b % m;
    return ans;
}
// debug:
template<class T>void print_vector(vector<T> &v){
    rep(i,0,sz(v))cout<<v[i]<<" \n"[i==sz(v)-1];
}
void dbg_out() {cerr << endl; }
template<typename Head, typename ... Tail> void dbg_out(Head H,Tail... T){
    cerr << ' ' << H;
    dbg_out(T...);
}
#ifdef LOCAL
#define dbg(...) cerr << "(" << #__VA_ARGS__ << "):", dbg_out(__VA_ARGS__), cerr << endl
#else
#define dbg(...) 42
#endif
//

const int N = 1e6 + 10;
int a[N];
int pre[N][2];
int suf[N][2];
void solve(){
    int n;
    cin >> n;
    int mx =0 ;
    for(int i=1;i<=n;i++){
        cin >> a[i];
        mx = max(mx , a[i]);
        rep(j,0,2){
            pre[i][j] = pre[i-1][j];
        }
        pre[i][i&1] += a[i];
    }
    for(int i=n+1;i>=1;i--){
        rep(j,0,2){
            suf[i][j] = (i==n+1 ? 0 : suf[i+1][j]);
        }
        suf[i][i&1] += a[i];
    }
    set<int> ids;
    set<pii> S;
    rep(i,1,n+1){
        S.insert(pii(a[i],i));
        ids.insert(i);
    }
    ids.insert(n+1);

    rep(B,1,mx+1){
        while(sz(S) && S.begin()->ff < B){
            int id = S.begin()->ss;
            ids.erase(id);
            S.erase(S.begin());
        }

        int par = 0;
        int last = 0;
        int res=0;
        for(int p : ids){
            // pegar os anteriores completos:
            int bk = ((last+1)&1)^par;
            if(last + 1 <= p-1){
                // [last+1,p-1]
                res += suf[last+1][bk] - suf[p][bk];
                // atualiza paridade:
                int qtd = (p-1-(last+1)+1); 
                if(qtd%2==1){
                    par^=1;
                }
            }   
            if( p > n )break;
            // pegar yo:
            int comp = a[p]/ B;
            int sobra = a[p]%B;
            res += comp/2 * B;
            if(par == 0){
                if(comp%2==1){
                    // pega 
                    res += B;
                }else if(sobra){
                    res += sobra;
                }
            }else{
                if(comp%2==1){
                    // OXOXO sobra
                    if(sobra > 0)
                        res += sobra;
                }else{
                    // OXOX sobra
                    // ignore
                }
            }
            par^=((comp + (sobra>0))&1);
            last = p;
        }

        cout << res << endl;
    }

    
}

int32_t main(){
    fastio;
    int t;
    cin >> t;
    while(t--){
        solve();
    }

    // math -> gcd it all
    // Did you swap N,M? N=1?
}

详细

Test #1:

score: 100
Accepted
time: 523ms
memory: 46308kb

input:

5
333834
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1...

output:

500000
500000
499995
499987
500000
500032
499996
499987
500032
500000
499994
499998
499981
499996
500080
500090
500077
500032
499980
499915
500035
499941
500055
499923
500000
499980
499935
500042
500174
499905
500002
499998
500218
499899
499965
500010
500144
500242
499839
499915
499987
500010
500122...

result:

ok 2500000 lines

Test #2:

score: 0
Accepted
time: 151ms
memory: 18588kb

input:

5
48356
1 1 2 2 1 1 1 1 2 4 8 4 1 2 128 4 1 1 2 1 1 2 2 1 1 1 4 1 1 1 2 1 2 8 8 1 1 1 1 8 1 2 1 2 1 1 1 1 8 1 2 1 2 1 2 1 2 1 1 8 1 2 4 1 1 1 1 1 4 1 2 1 1 1 2 1 2 64 1 256 1 1 1 1 1 2 32 1 1 2 1 1 2 2 1 1 1 1 1 1 4 1 1 2 2 1 1 1 1 1 1 2 1 2 256 4 1 1 2 1 2 1 2 2 1 1 2 2 2 2 1 1 1 2 1 32 1 1 1 4 1 1...

output:

500000
499939
500012
499925
499701
499996
499780
499879
500247
499914
500226
500164
500084
500054
499449
499819
500132
500378
500533
500517
499941
499527
500493
500808
500635
499680
500903
500128
500111
500413
499462
500244
500233
499885
499983
500105
499925
500185
499961
499466
500376
500081
498569...

result:

ok 987898 lines

Test #3:

score: 0
Accepted
time: 112ms
memory: 18652kb

input:

5
100000
1 10 9 6 2 9 5 8 6 8 3 10 10 4 8 10 5 4 8 1 3 3 10 6 8 2 1 1 7 4 4 7 3 3 2 7 3 8 4 8 8 8 9 7 1 6 7 5 1 6 5 6 10 7 1 7 10 4 9 6 7 3 4 2 7 7 8 9 7 1 8 4 1 6 10 1 3 8 8 5 6 4 10 5 10 3 4 1 8 2 8 4 6 1 7 2 10 2 2 3 3 3 4 6 6 6 6 7 8 8 8 9 9 9 9 9 10 10 4 5 10 3 1 5 6 7 9 5 3 2 2 3 1 2 1 6 1 1 6...

output:

275038
275208
276333
274460
274715
278680
279579
271029
278720
274871
251536
251586
251550
251533
251687
251362
251680
251736
251758
251640
252228
251127
251367
250702
251853
250779
250632
250725
251045
251774
251515
249096
250101
253104
247732
248767
248976
249529
253658
252323
252069
251541
251651...

result:

ok 1010971 lines

Test #4:

score: 0
Accepted
time: 1017ms
memory: 116860kb

input:

5
1413
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 1...

output:

499496
499496
499494
499848
499491
500202
499487
500553
499498
500905
499497
501264
499498
501599
499446
501961
499443
502306
499413
502649
499443
503017
499414
503329
499499
503710
499498
504049
499501
504360
499310
504777
499233
505155
499499
505440
499170
505761
499498
506160
499091
506583
499505...

result:

ok 502830 lines

Test #5:

score: 0
Accepted
time: 1ms
memory: 5620kb

input:

5
1
1
1
3
2
1 1
2
1 2
2
3 1

output:

1
2
2
3
1
2
1
2
3
3

result:

ok 10 lines

Extra Test:

score: 0
Extra Test Passed