Codeforces 145D Lucky Pair (组合计数)
2016-03-31 14:55
393 查看
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <queue> #include <set> #include <ctime> #include <cstdlib> using namespace std; #define inf 0x3f3f3f3f #define N 1000020 #define M 1000020 #define LL long long #define ULL unsigned long long #define mod 1000000007 #define ls (i << 1) #define rs (ls | 1) #define md (ll + rr >> 1) #define lson ll, md, ls #define rson md + 1, rr, rs #define B 350 int n, a , san , cnt; int pre ; set<int> st; set<int>::iterator p, q; ULL calc() { LL ret = 1ull * n * (n - 1) / 2 * (n - 2) / 3 * (n - 3) / 4; ret += 1ull * 2 * n * (n - 1) * (n - 2) / 6; ret += 1ull * n * (n - 1) / 2; return ret; } bool lucky(int x) { while(x) { if(x % 10 != 4 && x % 10 != 7) return 0; x /= 10; } return 1; } int main() { scanf("%d", &n); ULL ans = calc(); for(int i = 1; i <= n; ++i) { scanf("%d", &a[i]); if(lucky(a[i])) { san[++cnt] = i; } } san[++cnt] = n + 1; for(int i = 1; i < cnt; ++i) { pre[i] = 0; for(int j = 1; j < i; ++j) { if(a[san[i]] == a[san[j]]) { pre[i] = j; } } } for(int i = 2; i < cnt; ++i) { st.clear(); st.insert(0); ULL tmp = 0; for(int j = i; j < cnt; ++j) { if(pre[j] < i) { for(int k = pre[j]; k; k = pre[k]) { p = st.lower_bound(san[k]); q = p; p--; if(q != st.end()) { tmp += 1ull * (san[k] - *p) * (*q - san[k]) * (san[i] - san[i-1]); } else { tmp += 1ull * (san[k] - *p) * (san[i] - san[i-1] + 1) * (san[i] - san[i-1]) / 2; tmp += 1ull * (san[k] - *p) * (san[i-1] - san[k]) * (san[i] - san[i-1]); } st.insert(san[k]); } } ans -= tmp * (san[j+1] - san[j]); } } cout << ans << endl; return 0; }
相关文章推荐
- RAID5工作原理介绍
- Installation error: INSTALL_FAILED_OLDER_SDK
- 非调试模式下运行某项目但提示“is waiting for debugger......”
- poj2527——Polynomial Remains(多项式相除)
- KeyChain相关参数的说明
- crossDomain、allowDomain()、allowScriptAccess三者的关系解析
- how-to-stop-non-jailbroken-pirates-theory
- 对于 NSLayoutConstraint 不执行动画的处理:
- OC copy与retain的区别:
- 最近点对问题 POJ 3714 Raid && HDOJ 1007 Quoit Design
- IntelliJ IDEA 15.0.2导入grails工程
- LeetCode之旅(16)-Climbing Stairs
- LeetCode之旅(16)-Climbing Stairs
- LeetCode之旅(16)-Climbing Stairs
- http://jingyan.baidu.com/article/d169e186b38c37436611d8fa.html
- 小觅机器人sDeno亮相Nvidia发布会 发力人工智能
- 专访小觅机器人sDeno之父:吸引百万关注的促销员
- 手机安装apk出现INSTALL_FAILED_INSUFFICIENT_STORAGE
- rails命名约定
- 【english】 see you again