제출 #1218838

#제출 시각아이디문제언어결과실행 시간메모리
1218838lukasuliashviliIce Hockey World Championship (CEOI15_bobek)C++20
100 / 100
164 ms20892 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long 
#define fs first 
#define sc second 
#define pb push_back
#define rep(i,a,b) for(int i=a; i<=b; i++)
const int N=2000005;
int a[N],l,sum,ans;
vector<int> vec1,vec2,vec;
void sum1(int l , int r , int sum){
    if(l==r+1){
        vec1.pb(sum);
        return ;
    }
    sum1(l+1,r,sum);
    sum1(l+1,r,sum+a[l]);
}
void sum2(int l , int r , int sum){
    if(l==r+1){
        vec2.pb(sum);
        return ;
    }
    sum2(l+1,r,sum);
    sum2(l+1,r,sum+a[l]);
}
signed main(){
    int n, m;cin>>n>>m;
    for(int i=1; i<=n; i++){
        cin>>a[i];
    }
    sum1(1,n/2,0);
    sum2(n/2+1,n,0);
    sort(vec1.begin(),vec1.end());
    sort(vec2.begin(),vec2.end());
    // for(auto x:vec1){
    //     cout<<x<<" ";
    // }
    // cout<<endl;
    // for(auto x:vec2){
    //     cout<<x<<" ";
    // }
    // cout<<endl;
    l=vec2.size();
    l--;
    for(int i=0; i<vec1.size(); i++){
        if(l<0)break;
        while(vec1[i]+vec2[l]>m and l>=0){
            l--;
        }
        ans+=(l+1);
    }
    cout<<ans<<endl;

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...