답안 #222413

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
222413 2020-04-13T06:57:49 Z tqbfjotld Popcount (COCI19_popcount) C++14
0 / 110
5 ms 384 KB
#include <bits/stdc++.h>
using namespace std;

int n,k;

string toStr(int t){

    if (n<64) t%=(1LL<<n);
    if (t==0) return "0";
    string base = "";
    while (t>0){
        base = ((char)('0'+t%10))+base;
        t/=10;
    }
    return base;
}

string genNum(long long interval, bool b){
    if (interval<64){
        unsigned long long t = 0;
        for (int x = 0; x<64; x++){
            if ((x/interval)%2==b){
                t += (1LL<<x);
            }
        }
        if (n<64){
            t%=(1LL<<n);
        }
        string base = "";
        if (t==0) base = "0";
        while (t>0){
            base = (char)('0'+t%10)+base;
            t/=10;
        }
        string res = base;
        int shift = 64;
        while (shift<=n){
            res = "("+res+"+("+base+"<<"+toStr(shift)+"))";
            shift += 64;
        }
        return res;
    }
    else{
        unsigned long long t = -1;
        if (n<64){
            t%=(1LL<<n);
        }
        string base = "";
        if (t==0) base = "0";
        while (t>0){
            base = (char)('0'+t%10)+base;
            t/=10;
        }
        string ans = "0";
        for (int shift = 1; shift*64<n; shift++){
            if (((shift)/(interval/64))%2==b){
                ans = "("+ans+"+("+base+"<<"+toStr(shift*64)+"))";
            }
        }
        return ans;
    }
}

int main(){
    scanf("%d%d",&n,&k);
    vector<string> ans;
    for (int x = 0; x<k; x++){
        ans.push_back("A=(((A&"+genNum(1LL<<x,true)+")>>"+toStr(1<<x)+")+(A&"+genNum(1LL<<x,false)+"))");
    }
    printf("%d\n",ans.size());
    for (auto x : ans){
        printf("%s\n",x.c_str());
    }
}

Compilation message

popcount.cpp: In function 'int main()':
popcount.cpp:70:29: warning: format '%d' expects argument of type 'int', but argument 2 has type 'std::vector<std::__cxx11::basic_string<char> >::size_type {aka long unsigned int}' [-Wformat=]
     printf("%d\n",ans.size());
                   ~~~~~~~~~~^
popcount.cpp:65:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d",&n,&k);
     ~~~~~^~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 384 KB Accepted.
2 Correct 5 ms 256 KB Accepted.
3 Correct 5 ms 256 KB Accepted.
4 Correct 5 ms 256 KB Accepted.
5 Correct 5 ms 256 KB Accepted.
6 Correct 5 ms 256 KB Accepted.
7 Incorrect 5 ms 384 KB Wrong answer.
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 5 ms 384 KB Wrong command format.
# 결과 실행 시간 메모리 Grader output
1 Incorrect 4 ms 256 KB Wrong answer.
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 5 ms 384 KB Wrong answer.
2 Halted 0 ms 0 KB -