比赛 NOIP水题争霸赛 评测结果 WWWWWWWWWW
题目名称 博士的密码 最终得分 0
用户昵称 Joker 运行时间 0.013 s
代码语言 C++ 内存使用 1.12 MiB
提交时间 2018-02-11 21:43:12
显示代码纯文本
#include <bits/stdc++.h>
#define ll long long
#define f(i,a,b) for(register int i = a; i <= b; ++i)
#define max(a,b) (a)>(b)?(a):(b)
#define min(a,b) (a)<(b)?(a):(b)
using namespace std;
inline char get_char()
{
	static char buf[27860], *p1=buf, *p2=buf;
	return p1==p2&&(p2=(p1=buf)+fread(buf,1,27860,stdin),p1==p2)?EOF:*p1++;
}
inline int read()
{
	int x = 0, f = 0; char ch = get_char();
	while(ch < '0'||ch > '9') {f|=(ch=='-'); ch = get_char();}
	while(ch >= '0'&&ch <= '9') {x = (x<<3) + (x<<1) + (ch^48); ch = get_char();}
	return f?-x:x;
}
ll key, n, tot = 0, lc;
ll a[1000001], sum[1000001];
void dfs(int k, int ans)
{
	if(k > lc) return;
	if(ans > key) return;
	if(ans+sum[n]-sum[k-1] < key) return;
	if(ans == key) {++tot; return;}
	dfs(k+1, ans+a[k]);
	dfs(k+1, ans);
}
int main()
{
	freopen("password1.in", "r", stdin);
	freopen("password1.out", "w", stdout);
	n = read(), key = read(); lc = n + 1;
	f(i,1,n) {a[i] = read(); sum[i] = sum[i-1]+a[i];}
	dfs(1, 0);
	printf("%lld\n", tot);
	fclose(stdin);
	fclose(stdout);
	return 0;
}