hdu5399(模拟)
2015-08-18 16:30
309 查看
题意:
在一个序列中找出连续的子序列,满足在这个子序列中从某一个位置开始,左侧是一公差是d1的等差序列,右侧是一个公差是d2的等差序列,问能找到多少个子序列。
思路:
模拟,不多说,贴队友的代码。
代码:
在一个序列中找出连续的子序列,满足在这个子序列中从某一个位置开始,左侧是一公差是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; }
相关文章推荐
- 实习笔记2
- 使用python进行系统资源使用率监控
- Delphi中用Webbrowser加载百度地图滚轮失效(ApplicationEvents里使用IsChild提前判断是哪个控件的消息)
- 字符串移位包含的问题
- dedecms 织梦利用arcpagelist标签实现首页arclist分页
- 重构11-20
- iOS开发问题——简单的验证码倒计时显示
- python脚本测试网站响应时间
- nodejs中如何创建和加载模块
- php readfile(),解决下载文件因时文件太大而无法找到文件
- 导出导入之IMP-00010: 不是有效的导出文件, 头部验证失败
- java中小数的处理:高精度运算用bigDecimal类,精度保留方法,即舍入方式的指定
- [网狐]前台控制帐号生成
- java中小数的处理:高精度运算用bigDecimal类,精度保留方法,即舍入方式的指定
- 图文解释XCode常用快捷键的使用
- hdu 1358 Period
- poj 3281 Dining (最大流)
- ShutdownHookManager顺序并有优先级的Hook
- 数列排序
- ubuntu下如何查看用户登录及系统授权相关信息