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