栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 3638 Fruit Ninja

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 3638 Fruit Ninja

#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int N = 25;const int Mod = 100000007;int Power(int x, int cf) { if (cf == 0) return 1; long long ret = Power(x, cf >> 1); ret = ret * ret % Mod; if (cf & 1) ret = ret * x % Mod; return ret;}long long C(int m, int n) { if (n < 0 || n > m || m < 0) return 0; long long up = 1; long long down = 1; for (int i = m - n + 1; i <= m; i++) up = up * i % Mod; for (int i = 1; i <= n; i++) down = down * i % Mod; return up * Power(down, Mod - 2) % Mod;}int n, m, s;char Str[100];char S1[100];char S2[100];int a[N];long long ans;void dfs(int p, int sum, int t) { if (sum < 1) return; if (p > m) { if (t & 1) ans -= C(sum - 1, n - 1); else ans += C(sum - 1, n - 1); ans = (ans % Mod + Mod) % Mod; return; } dfs(p + 1, sum, t); dfs(p + 1, sum - a[p], t + 1);}int main() { while (scanf("%d%d", &n, &s) != EOF) { if (n == 0) break; gets(Str); m = 0; s += n; bool check = true; while (1) { if (!gets(Str)) break; if (strlen(Str) < 2) break; int Num; sscanf(Str, "%s%s%s%d", S1, S1, S2, &Num); Num++; if (S1[0] == 'l') { a[++m] = Num - 1; if (Num == 1) check = false; } else s -= Num; } if (!check) printf("0n"); else { ans = 0; dfs(1, s, 0); printf("%dn", ans); } }}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/379647.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号