Submission #1218742

#TimeUsernameProblemLanguageResultExecution timeMemory
1218742nataliaaIce Hockey World Championship (CEOI15_bobek)C++20
20 / 100
485 ms10556 KiB
#include<bits/stdc++.h>
using namespace std;
void test_case() {
	int n, k;
	cin >> n >> k ;
	int a[n];
	for(int i = 0; i< n ; i++) cin >> a[i];
	int q = n/2;
	int p = n-n/2;
	int a1= 1, b=1;
	for(int i = 1; i<=q; i++) a1*=2;
	for(int i = 1; i<=p; i++) b*=2;
	vector<int> v1, v2;
	for(int i = 0; i< a1; i++) {
		string s = "";
		int i1 = i;
		for(int j = 0 ; j < q; j++) {
		    if(i1%2==0) s+='0';
		    else s+='1';
		    i1/=2;
		}
		if(i==0) s = "0";
		int sum = 0;
		for(int j = 0; j < n; j++) {
			if(s[j]=='1') sum+=a[j];
		}
		if(sum<=k) v1.push_back(sum);
	}
	for(int i = 0; i< b; i++) {
		string s = "";
		int i1 = i;
		for(int j = 0; j <p ; j++) {
		    if(i1%2==0) s+='0';
		    else s+='1';
		    i1/=2;
		}
		if(i==0) s = "0";
		int sum = 0;
		for(int j = 0; j < n; j++) {
			if(s[j]=='1') sum+=a[j+q];
		}
		if(sum<=k) v2.push_back(sum);
	}
	sort(v1.begin(), v1.end());
	sort(v2.begin(), v2.end());
	int r = v2.size()-1;
	int ans =0;
	for(int i = 0; i < v1.size(); i++) {
	    while(v2[r]+v1[i]>k&&r>=0) r--;
	    ans+=r+1;
	}
	cout << ans;
}

signed main() {
	int t;
	t = 1;
	while(t--) test_case();
}
#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...