提出 #49509380


ソースコード 拡げる

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
//#include <atcoder/modint>
//using namespace atcoder;
//using mint = modint998244353;
# define M_PI           3.14159265358979323846  /* pi */
#define watch(x) cout << (#x) << " is " << (x) << endl
 
//#pragma GCC target ("avx2")
#pragma GCC optimization ("Ofast")
 
#if 0
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
template <class T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
template <class K, class V> using ordered_map = tree<K, V, less<K>, rb_tree_tag, tree_order_statistics_node_update>;
#endif

const int MOD = (1e9+7);
template < typename T = int > ostream& operator << (ostream &out, const vector < T > &v){ 
    for (const T &x: v) out << x << ' '; 
    return out;
}
template<class T>
void printmat(const vector<vector<T>>& mat) {
    for (auto row : mat) {
        for (auto elem : row)
            cout << elem << " ";
        cout << "\n";
    }
}
void printdq(const deque<int>& v) {
    for (auto elem : v)
        cout << elem << " ";
    cout << endl;
}
template<class T>
void printv(const vector<T>& v) {
    for (auto elem : v)
        cout << elem << " ";
    cout << "\n";
}
template<class T>
void printdq(const deque<T>& v) {
    for (auto elem : v)
        cout << elem << " ";
    cout << endl;
}
template<class T1, class T2>
void printvp(const vector<pair<T1,T2>>& vp) {
    for (auto pr : vp) {
        cout << pr.first << " " << pr.second;
        cout << "\n";
    }
}
void printvs(const vector<set<int>>& vs) {
    for (auto row : vs) {
        for (auto elem : row)
            cout << elem << ", ";
        cout << endl;
    }
}
template<class T>
void printht(const unordered_map<T, T>& ht) {
    for (auto elem : ht)
        cout << elem.first << " : " << elem.second << endl;
}
template<class T1, class T2>
void printmp(const map<T1, T2>& ht) {
    for (auto elem : ht)
        cout << elem.first << " : " << elem.second << endl;
}
template<class T>
void printst(const set<T>& st) {
    for (auto elem : st)
        cout << elem << " ";
    cout << endl;
}
template<class T>
void printms(const multiset<T>& st) {
    for (auto elem : st)
        cout << elem << " ";
    cout << endl;
}
 
bool isPrime(long long n) {
    if (n <= 1)
        return false;
    if (n <= 3)
        return true;
    if (n % 2 == 0 || n % 3 == 0)
        return false;
    for (long long i = 5; i * i <= n; i = i + 6)
        if (n % i == 0 || n % (i + 2) == 0)
            return false;
    return true;
}
 
map<long long, long long> primeFactors(long long n) {
    map<long long, long long> ans;
    while (n % 2 == 0) {
        ans[2]++;
        n = n/2;
    }
    for (long long i = 3; i*i <= (n); i = i + 2) {
        while (n % i == 0) {
            ans[i]++;
            n = n/i;
        }
    }
    if (n > 2)
        ans[n]++;
    return ans;
}
 
/*
    vector<int> uf(n), sz(n,1);
    for (int i=0; i<n; i++) 
        uf[i] = i;
*/
int find_f(const vector<int>& uf, int i) {
    while (uf[i]!=i)
        i = uf[i];
    return i;
}
bool union_f(vector<int>& uf, vector<int>& sz, int a, int b) {
    a = find_f(uf, a);
    b = find_f(uf, b);
    //cout << "a, b = " << a << ", " << b << endl;
    if (a==b) return false;
    if (sz[a] < sz[b]) {
        //cout << "sz[a], sz[b] = " << sz[a] << ", " << sz[b] << endl;
        //cout << "a, b = " << a << ", " << b << endl;
        swap(a,b);
        //cout << "a, b = " << a << ", " << b << endl;
    }
    sz[a] += sz[b];
    uf[b] = a;
    return true;
}
 
long long modexp(long long b, long long e, long long M) {
    if (!e) return 1;
    b %= M;
    long long x = modexp(b * b % M, e / 2, M);
    if (e % 2) {
        return b * x % M;
    } else {
        return x;
    }
}


ll gcdExtended(ll a, ll b, ll* x, ll* y) {
    if (a == 0) {
        *x = 0, *y = 1;
        return b;
    }
    ll x1, y1;
    ll gcd = gcdExtended(b % a, a, &x1, &y1);
    *x = y1 - (b / a) * x1;
    *y = x1;
    return gcd;
}

ll modInverse(ll a, ll m) {
    ll x, y, res=-1;
    ll g = gcdExtended(a, m, &x, &y);
    if (g != 1) {
        //cout << "Inverse doesn't exist";
        res = -1;
    } else {
        // m is added to handle negative x
        res = (x % m + m) % m;
    }
    return res;
}

int lenOfLIS(vector<int>& v) {        
    int n = v.size(), len = 0;
    vector<int> dp(n,0);
    for (int num : v) {
        int i = lower_bound(dp.begin(), dp.begin()+len, num) - dp.begin();
        dp[i] = num;
        if (i == len) {
            len++;
        }
    }
    return len;        
}


#if 0
const int N = 1e6+4;  // limit for array size
int n;  // array size
int t[2 * N];

void build() {  // build the tree
  for (int i = n - 1; i > 0; --i) t[i] = max(t[i<<1], t[i<<1|1]);
}

void modify(int p, int value) {  // set value at position p
  for (t[p += n] = value; p > 1; p >>= 1) t[p>>1] = t[p] + t[p^1];
}

int query(int l, int r) {  // max on interval [l, r)
  int res = 0;
  for (l += n, r += n; l < r; l >>= 1, r >>= 1) {
    if (l&1) res = max(res, t[l++]);
    if (r&1) res = max(res, t[--r]);
  }
  return res;
}
#endif

vector<int> SieveOfEratosthenes(int n) {
    bool prime[n+1];
    memset(prime, true, sizeof(prime));
  
    for (int p=2; p*p<=n; p++) {
        if (prime[p]) {
            for (int i=p*p; i<=n; i+=p)
                prime[i] = false;
        }
    }
    vector<int> v;
    for (int p=2; p<=n; p++)
        if (prime[p])
            v.push_back(p);
    return v;
}



int main() {
    //ios_base::sync_with_stdio(false);
    //cin.tie(NULL);    
    int T=1, caseIdx=0;   
    //cin >> T;  
    while (T--) {
        //caseIdx++;
        //const int M = 998244353;
        int n, m=0, ans=0;
        cin >> n;
        int x = n-1;
        while (x>0) {
            x/=2;
            m++;
        }
        cout << m << endl;
        map<string,int> mp, ht;
        string init(m,'0');
        mp[init] = 1;
        for (int i=1; i<n; i++) {
            string s;
            int x = i;
            while (x) {
                s.push_back('0'+(x%2));
                x/=2;
            }
            while (s.length()<m)
                s.push_back('0');
            reverse(s.begin(), s.end());
            mp[s] = i+1;
        }
        //printmp(mp);
        for (int i=0; i<m; i++) {
            string s;
            vector<int> v;
            int val = 0;
            for (auto it=mp.begin(); it!=mp.end(); it++) {
                int digit = it->first[i] - '0';
                val = val | digit;
                if (it->first[i]=='1')
                    v.push_back(it->second);
            }
            ht[s] = i+1;
            cout << v.size() << " ";
            for (int elem : v)
                cout << elem << " ";
            cout << endl;
        }
        //printmp(ht);
        string t;
        cin >> t;
        ans = mp[t];
        
        cout << ans << endl;
        
        //cout << fixed << setprecision(9);
        //cout << ans << "\n";
        //cout << "Case #" << caseIdx << ": " << ans << "\n";   
    }
}

提出情報

提出日時
問題 E - Bad Juice
ユーザ llc5pg
言語 C++ 17 (gcc 12.2)
得点 425
コード長 7428 Byte
結果 AC
実行時間 3 ms
メモリ 3916 KiB

コンパイルエラー

Main.cpp:11: warning: ignoring ‘#pragma GCC optimization’ [-Wunknown-pragmas]
   11 | #pragma GCC optimization ("Ofast")
      | 
Main.cpp: In function ‘int main()’:
Main.cpp:263:30: warning: comparison of integer expressions of different signedness: ‘std::__cxx11::basic_string<char>::size_type’ {aka ‘long unsigned int’} and ‘int’ [-Wsign-compare]
  263 |             while (s.length()<m)
      |                    ~~~~~~~~~~^~
Main.cpp:240:14: warning: unused variable ‘caseIdx’ [-Wunused-variable]
  240 |     int T=1, caseIdx=0;
      |              ^~~~~~~

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 425 / 425
結果
AC × 1
AC × 26
セット名 テストケース
Sample example0.txt
All 000.txt, 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, 012.txt, 013.txt, 014.txt, 015.txt, 016.txt, 017.txt, 018.txt, 019.txt, 020.txt, 021.txt, 022.txt, 023.txt, 024.txt, example0.txt
ケース名 結果 実行時間 メモリ
000.txt AC 3 ms 3652 KiB
001.txt AC 3 ms 3884 KiB
002.txt AC 3 ms 3692 KiB
003.txt AC 2 ms 3808 KiB
004.txt AC 3 ms 3836 KiB
005.txt AC 2 ms 3892 KiB
006.txt AC 2 ms 3820 KiB
007.txt AC 2 ms 3916 KiB
008.txt AC 2 ms 3688 KiB
009.txt AC 3 ms 3704 KiB
010.txt AC 3 ms 3816 KiB
011.txt AC 2 ms 3696 KiB
012.txt AC 2 ms 3724 KiB
013.txt AC 3 ms 3828 KiB
014.txt AC 3 ms 3688 KiB
015.txt AC 3 ms 3748 KiB
016.txt AC 2 ms 3892 KiB
017.txt AC 3 ms 3820 KiB
018.txt AC 2 ms 3820 KiB
019.txt AC 3 ms 3836 KiB
020.txt AC 2 ms 3824 KiB
021.txt AC 2 ms 3896 KiB
022.txt AC 2 ms 3820 KiB
023.txt AC 3 ms 3744 KiB
024.txt AC 2 ms 3696 KiB
example0.txt AC 2 ms 3740 KiB