結果

問題 No.3219 Ruler to Maximize
ユーザー ゼリトキ
提出日時 2025-08-01 21:54:26
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 1,637 bytes
コンパイル時間 3,106 ms
コンパイル使用メモリ 282,368 KB
実行使用メモリ 7,720 KB
最終ジャッジ日時 2025-08-01 21:54:32
合計ジャッジ時間 5,695 ms
ジャッジサーバーID
(参考情報)
judge1 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 14 WA * 18
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (ll i = 0; i < (ll)(n); i++)
#define ll long long
const long long mod=998244353;
const long long hmod=46216567629137;
int main(){
    cin.tie(0)->sync_with_stdio(0);
    cout.tie(0);
    int N;
    cin>>N;
    int A[N+1];
    for(int i=1;i<=N;i++) cin>>A[i];
    int bits[20];
    for(int i=0;i<20;i++) bits[i]=0;
    for(int i=1;i<=N;i++){
        int wari=1;
        rep(j,15){
            if((A[i]/wari)%2==1) bits[j]++;
            wari*=2;
        }
    }
    vector<pair<int,int>>ok,ng;
    for(int i=1;i<=N;i++){
        int wari=1;
        bool check=1;
        rep(j,15){
            if((A[i]/wari)%2==1 && bits[j]>=2) check=0;
            wari*=2;
        }
        if(check) ok.push_back({A[i],i});
        else ng.push_back({A[i],i});
    }
    int P=1;
    for(int i=1;i<=ok.size();i++) P*=2;
    ll ngs=0;
    for(int i=0;i<ng.size();i++) ngs|=ng[i].first;
    ll ans=0;
    ll ans_bit=0;
    for(int i=0;i<P;i++){
        ll cnt1=0;
        ll cnt2=ngs;
        int wari=1;
        for(int j=0;j<ok.size();j++){
            if((i/wari)%2==1) cnt1|=ok[j].first;
            else cnt2|=ok[j].first;
            wari*=2;
        }
        if(cnt1*cnt2>ans){
            ans=cnt1*cnt2;
            ans_bit=i;
        }
    }
    cout<<ans<<"\n";
    char color[N+1];
    rep(i,ng.size()){
        color[ng[i].second]='W';
    }
    int wari=1;
    for(int i=0;i<ok.size();i++){
        if((ans_bit/wari)%2==1) color[ok[i].second]='B';
        else color[ok[i].second]='W';
        wari*=2;
    }
    for(int i=1;i<=N;i++) cout<<color[i];
    cout<<"\n";
}   
0