hdu5399(模拟)
来源:互联网 发布:淘宝添加背景图片代码 编辑:程序博客网 时间:2024/05/22 17:23
题意:
在一个序列中找出连续的子序列,满足在这个子序列中从某一个位置开始,左侧是一公差是d1的等差序列,右侧是一个公差是d2的等差序列,问能找到多少个子序列。
思路:
模拟,不多说,贴队友的代码。
代码:
#include <iostream>#include <cstring>#include <cstdio>using namespace std;const long long maxn = 100005;long long a[maxn];long long L[maxn], R[maxn];int main() { long long n, d1, d2;// freopen("a.txt","r",stdin); while(EOF != scanf("%I64d%I64d%I64d",&n, &d1, &d2)) { for(long long i = 1; i <= n; i++) { scanf("%I64d",&a[i]); } memset(L, 0, sizeof(L)); memset(R,0, sizeof(R)); a[0] = 100000000000; a[++n] = 100000000000;// for(long long i = 0; i <= n; i++) {// printf("%I64d ", a[i]);// }puts(""); long long ans = n-1; long long num = 1; long long lx, rx = 1; for(long long i = 2; i <= n; i++){ if(a[i] - a[i - 1] == d1) { num++; if(num == 2) { lx = i - 1; } } else { if(num >= 2) { long long x = num - 1; ans += (x * (x + 1) / 2); rx = i - 1; L[rx] = lx; } num = 1; } } if(d1 != d2) { num = 1; lx = 1; rx = 1; for(long long i = 2; i <= n; i++){ if(a[i] - a[i - 1] == d2) { num++; if(num == 2) { lx = i - 1; } } else { if(num >= 2) { long long x = num - 1; ans += (x * (x + 1) / 2); rx = i - 1; R[lx] = rx; } num = 1; } } for(long long i = 1; i <= n; i++){ if(L[i] != 0 && R[i] != 0) { long long m1 = i - L[i]; long long m2 = R[i] - i; ans += m1 * m2; } } } printf("%I64d\n", ans);// cout << ans << endl; } return 0;}
0 0
- hdu5399(模拟)
- hdu5399
- hdu5399
- HDU5399
- hdu5399(计数)
- hdu5399(找规律。。。)
- hdu5399 Too simple
- hdu5399 Too Simple
- hdu5399 Too Simple
- hdu5399(2015多校9)--Too Simple
- hdu5399 思考的细节比较多
- hdu5399 Too Simple(函数映射)
- hdu5399 Too Simple(推论,分类讨论)
- 模拟
- 模拟
- 模拟
- 模拟
- 模拟
- Ubuntu搭建FTP服务器
- 关于QT3.3下QListViewItem的应用
- 如何查看Redhat Linux版本号
- Objective-C 学习笔记 4 数据类型和表达式
- js中堆内存和栈内存事例
- hdu5399(模拟)
- hdu 2089 不要62 (数位DP)
- 图文解释XCode常用快捷键的使用
- java知识
- 导出导入之IMP-00010: 不是有效的导出文件, 头部验证失败
- Javascript实现瀑布流
- php readfile(),解决下载文件因时文件太大而无法找到文件
- hdu 1358 Period
- WINCE下由HBITMAP获取位图RGB颜色数据