2017"百度之星"程序设计大赛
来源:互联网 发布:淘宝宝贝详情如何添加 编辑:程序博客网 时间:2024/06/07 04:00
1001.Arithmetic of Bomb
直接模拟求出最后的串就好了。
#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <algorithm>#include <string>using namespace std;char s[1005];long long ans = 0;const int mod = 1000000007;struct Node{ char s[1005]; int cnt;};Node gao2(int &pos){ pos--; Node temp; temp.cnt = s[pos] - '0'; pos--; while (s[pos] < '0' || s[pos] > '9') pos--; int t = 0; for (; s[pos] != '('; pos--){ temp.s[t++] = s[pos]; } temp.s[t] = 0; return temp;}void gao(long long x){ x %= mod; ans = ans + x; ans %= mod;}int main(){ int t; scanf("%d", &t); while (t--) { scanf("%s", s); int len = strlen(s); ans = 0; long long pre = 1; for (int i = len - 1; i >= 0; i--){ if (s[i] == ')'){ Node now = gao2(i); while (now.cnt--){ int len1 = strlen(now.s); for (int j = 0; j < len1; j++){ gao((now.s[j] - '0') * pre); pre *= 10; pre %= mod; } } } else{ gao((s[i] - '0') * pre); pre *= 10; pre %= mod; } } printf("%I64d\n", ans); }}
1003.Pokémon GO
解法1:dp
解法2:找规律。。。
#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <algorithm>#include <string>using namespace std;const long long mod = 1e9 + 7;//long long biao[] = { 1, 6, 12, 26, 48, 86, 148, 250, 416, 686, 1124, 1834, 2984, 4846, 7860, 12738, 20632, 33406, 54076, 87522, 141640, 229206, 370892, 600146, 971088, 1571286, 2542428, 4113770, 6656256, 10770086, 17426404, 28196554, 45623024, 73819646, 119442740, 193262458 };long long qpow(long long x, long long a) { long long ret = 1; while (a) { if (a & 1) ret = (ret*x) % mod; x = (x*x) % mod; a >>= 1; } return ret;}long long num[11000];int main(){ num[0] = 1; num[1] = 1; num[2] = 6; num[3] = 12; for (int i = 4; i <= 10000; i++) { num[i] = (( ( ( ( (8 * i - 31) * num[i - 1] % mod + mod ) % mod - (4 * i - 19) * num[i - 2] % mod + mod) % mod ) - (3 * i - 10) * num[i - 3] % mod + mod) % mod + (2 * i - 10) * num[i - 4] + mod) % mod * qpow(3 * i - 11, mod - 2) % mod; } int T; cin >> T; while (T--) { long long N; cin >> N; long long ans = num[N] * qpow(2, N) % mod; cout << ans << endl; }}
1005.Valley Numer
数位dp。
dp[p][pre][isdown][lim][st]表示进行到第p位,前一位是pre,是否是下降的,是否有限制,是否之前都是前导0时的种类数。
#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <algorithm>#include <string>using namespace std;const long long MOD = 1e9 + 7;long long dp[110][11][2][2][2];int len, num[110];char str[110];long long dfs(int p, int pre, int isdown, int lim, int st){ if (p == len + 1)return !st; if (dp[p][pre][isdown][lim][st] != -1 && !lim)return dp[p][pre][isdown][lim][st]; long long temp = 0; int r = lim ? num[p] : 9; for (int i = 0; i <= r; i++) { if (isdown) { if (i > pre) { temp += dfs(p + 1, i, 0, lim&&i == r, 0) % MOD; } else { if (st && i == 0) { temp += dfs(p + 1, 10, 1, lim&&i == r, st) % MOD; } else { temp += dfs(p + 1, i, 1, lim&&i == r, 0) % MOD; } } } else if (i >= pre) { temp += dfs(p + 1, i, 0, lim&&i == r, 0) % MOD; } temp = temp % MOD; } return dp[p][pre][isdown][lim][st] = temp % MOD;}int main(){ int T; scanf("%d\n", &T); while (T--) { scanf("%s", str); len = strlen(str); for (int i = 0; i<len; i++) num[i + 1] = str[i] - '0'; memset(dp, -1, sizeof(dp)); printf("%I64d\n", dfs(1, 10, 1, 1, 1)); } return 0;}
阅读全文
0 0
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 【2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛-资格赛
- 二分图模板
- java-String
- 面试总结
- shutdown函数和FIN_WAIT2状态
- NYOJ27
- 2017"百度之星"程序设计大赛
- Linux 下 MySQL安装教程
- 关于微信公众号开发上传永久素材时,提示40015
- 并查集入门--hd 1863
- Python基础
- QT中的QML元素
- php安装和使用
- Codeforces Round #429 (Div. 2) 总结
- Ext JS 自定义事件