답안 #677799

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
677799 2023-01-04T11:33:15 Z DwightKSchrute Super Dango Maker (JOI22_dango3) C++17
100 / 100
3814 ms 920 KB
/*
#pragma GCC target ("avx2")
#pragma GCC optimization ("O3")
#pragma GCC optimization ("unroll-loops")
 */
#include<bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>

//using namespace __gnu_pbds;
using namespace std;

typedef long double ld;
typedef long long ll;
typedef unsigned long long ull;
typedef vector<int>vi;
typedef vector<vector<int>>vvi;
typedef vector<ll>vl;
typedef vector<vl> vvl;
typedef pair<int,int>pi;
typedef pair<ll,ll> pl;
typedef vector<pl> vpl;
typedef vector<ld> vld;
typedef pair<ld,ld> pld;
typedef vector<pi> vpi;

//typedef tree<ll, null_type, less_equal<ll>,rb_tree_tag,tree_order_statistics_node_update> ordered_set;
template<typename T> ostream& operator<<(ostream& os, vector<T>& a){os<<"[";for(int i=0; i<ll(a.size()); i++){os << a[i] << ((i!=ll(a.size()-1)?" ":""));}os << "]\n"; return os;}

#define all(x) x.begin(),x.end()
#define YES out("YES")
#define NO out("NO")
#define out(x){cout << x << "\n"; return;}
#define outfl(x){cout << x << endl;return;}
#define GLHF ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL)
#define print(x){for(auto ait:x) cout << ait << " "; cout << "\n";}
#define pb push_back
#define umap unordered_map


template<typename T>
void read(vector<T>& v){
    int n=v.size();
    for(int i=0; i<n; i++)
        cin >> v[i];
}
template<typename T>
vector<T>UNQ(vector<T>a){
    vector<T>ans;
    for(T t:a)
        if(ans.empty() || t!=ans.back())
            ans.push_back(t);
    return ans;
}

#include "dango3.h"


int N,M;

int max_cnt(vi a){
    vector<bool>in(N*M+1);
    for(int x:a)
        in[x]=1;
    vi rest;
    for(int i=1; i<=N*M; i++)
        if(!in[i])
            rest.pb(i);
    return M- Query(rest);
}

void Solve(int n,int m){
    N=n,M=m;

    vvi groups(m);
    for(int i=1; i<=n*m; i++){
        int l=0,r=m-1,color=0;
        while(l<=r){
            int mid=(l+r)/2;
            vi cur;
            for(int j=0; j<=mid; j++)
                for(int x:groups[j])
                    cur.pb(x);
            cur.pb(i);
            if(max_cnt(cur)==mid+2)
                l=mid+1;
            else
                r=mid-1,color=mid;
        }

        groups[color].pb(i);
    }


    for(const vi& group:groups)
        Answer(group);
}
/*
 3 2
3 3 1 2 1 2
 
pretty similar to https://codeforces.com/contest/1697/problem/D
 */
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 304 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 304 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 32 ms 492 KB Output is correct
2 Correct 32 ms 460 KB Output is correct
3 Correct 31 ms 340 KB Output is correct
4 Correct 32 ms 396 KB Output is correct
5 Correct 31 ms 340 KB Output is correct
6 Correct 30 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 948 ms 612 KB Output is correct
2 Correct 949 ms 496 KB Output is correct
3 Correct 959 ms 524 KB Output is correct
4 Correct 946 ms 584 KB Output is correct
5 Correct 926 ms 740 KB Output is correct
6 Correct 922 ms 460 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3777 ms 796 KB Output is correct
2 Correct 3787 ms 652 KB Output is correct
3 Correct 3809 ms 920 KB Output is correct
4 Correct 3814 ms 792 KB Output is correct
5 Correct 3685 ms 820 KB Output is correct
6 Correct 3675 ms 792 KB Output is correct