QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#808628#9870. Itemsucup-team1134RE 1ms5936kbC++232.7kb2024-12-10 22:35:072024-12-10 22:35:07

Judging History

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

  • [2024-12-10 22:35:07]
  • 评测
  • 测评结果:RE
  • 用时:1ms
  • 内存:5936kb
  • [2024-12-10 22:35:07]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return true; } return false; }
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return true; } return false; }
#define vi vector<int>
#define vl vector<ll>
#define vii vector<pair<int,int>>
#define vll vector<pair<ll,ll>>
#define vvi vector<vector<int>>
#define vvl vector<vector<ll>>
#define vvii vector<vector<pair<int,int>>>
#define vvll vector<vector<pair<ll,ll>>>
#define vst vector<string>
#define pii pair<int,int>
#define pll pair<ll,ll>
#define pb push_back
#define all(x) (x).begin(),(x).end()
#define mkunique(x) sort(all(x));(x).erase(unique(all(x)),(x).end())
#define fi first
#define se second
#define mp make_pair
#define si(x) int(x.size())
const int mod=998244353,MAX=200005;
const ll INF=15LL<<58;

bitset<MAX> mada,dp;
ll cost[MAX],D[MAX];

int main(){
    
    std::ifstream in("text.txt");
    std::cin.rdbuf(in.rdbuf());
    cin.tie(0);
    ios::sync_with_stdio(false);
    
    int Q;cin>>Q;
    while(Q--){
        ll N,M;cin>>N>>M;
        vl S(N);
        for(int i=0;i<N;i++){
            cin>>S[i];
        }
        sort(all(S));
        for(int i=1;i<N;i++){
            S[i]-=S[0];
        }
        M-=S[0]*N;
        S[0]=0;
        if(M<0){
            cout<<"No\n";
            continue;
        }
        if(M&&S.back()==0){
            cout<<"No\n";
            continue;
        }
        
        int K=S.back();
        dp.reset();
        mada.reset();
        mada[0]=false;
        for(int i=1;i<K+K;i++){
            mada[i]=true;
        }
        for(int i=0;i<K;i++){
            cost[i]=INF;
            D[i]=INF;
        }
        cost[0]=0;
        D[0]=0;
        for(ll x:S){
            if(x<K) dp[x]=1;
        }
        
        queue<int> Q;
        Q.push(0);
        while(!Q.empty()){
            int u=Q.front();Q.pop();
            auto nex=(dp<<u)&mada;
            while(1){
                int i=nex._Find_first();
                if(i<MAX){
                    i%=K;
                    if(mada[i]){
                        cost[i]=cost[u]+(i-u)%K;
                        D[i]=D[u]+1;
                        mada[i]=false;
                        mada[i+K]=false;
                        Q.push(i);
                    }
                    nex[i]=false;
                    nex[i+K]=false;
                }else{
                    break;
                }
            }
        }
        
        if(D[M%K]>=N||cost[M%K]>M) cout<<"No\n";
        else{
            if(D[M%K]+(M-cost[M%K])/K<=N) cout<<"Yes\n";
            else cout<<"No\n";
        }
    }
}



Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 5936kb

input:

4
5 25
0 0 0 0 5
5 11
4 4 4 5 5
5 0
1 2 3 4 5
5 25
0 1 2 3 4

output:

Yes
No
No
No

result:

ok 4 token(s): yes count is 1, no count is 3

Test #2:

score: -100
Runtime Error

input:

1314
1 0
0
1 0
1
1 1
0
1 1
1
2 0
0 0
2 0
0 1
2 0
0 2
2 0
1 0
2 0
1 1
2 0
1 2
2 0
2 0
2 0
2 1
2 0
2 2
2 1
0 0
2 1
0 1
2 1
0 2
2 1
1 0
2 1
1 1
2 1
1 2
2 1
2 0
2 1
2 1
2 1
2 2
2 2
0 0
2 2
0 1
2 2
0 2
2 2
1 0
2 2
1 1
2 2
1 2
2 2
2 0
2 2
2 1
2 2
2 2
2 3
0 0
2 3
0 1
2 3
0 2
2 3
1 0
2 3
1 1
2 3
1 2
2 3
2 0...

output:


result: