博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 5183 Negative and Positive (NP)
阅读量:5818 次
发布时间:2019-06-18

本文共 1152 字,大约阅读时间需要 3 分钟。

思路:维护一下前缀和,从后往前向set里面插入前缀和,然后查找sum[i-1]+(-1)i+1*k在不在set里面。

代码(快读+set):

1466ms险过,用hash表应该快一点。

#include
#include
#include
#include
#include
#include
using namespace std;#define ll long long#define pb push_back#define mem(a,b) memset(a,b,sizeof(a)) inline int read(){ int s=0,w=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-')w=-1;ch=getchar();} while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar(); return s*w; } const int N=1e6+5;ll a[N];ll sum[N]={ 0};set
s;int main(){ /*ios::sync_with_stdio(false); cin.tie(0);*/ int t,cnt=0; scanf("%d",&t); while(t--) { cnt++; int n,k; scanf("%d %d",&n,&k); getchar(); for(int i=1;i<=n;i++)a[i]=read(); for(int i=1;i<=n;i++)sum[i]=sum[i-1]+(i%2?a[i]:-a[i]); /*for(int i=1;i<=n;i++)cout<
<<' '; cout<
=1;i--) { s.insert(sum[i]); if(i&1) { if(s.find(sum[i-1]+k)!=s.end()) { f=true; break; } } else { if(s.find(sum[i-1]-k)!=s.end()) { f=true; break; } } } printf("Case #%d: ",cnt); if(f)puts("Yes."); else puts("No."); s.clear(); } return 0;}

 

转载于:https://www.cnblogs.com/widsom/p/7622243.html

你可能感兴趣的文章
决策树算法
查看>>
环境错误2
查看>>
spring下的多线程
查看>>
C++_了解虚函数的概念
查看>>
XXS level5
查看>>
垃圾回收技术的发展-转
查看>>
BSP模型与实例分析 [转]
查看>>
GCD
查看>>
css-定位
查看>>
获取Checkbox的值
查看>>
数论,数学
查看>>
关于Unity层级面板的自动初始化
查看>>
OO ALV 实现方式 ALV TABLE 之 三合一
查看>>
软件工程课程总结
查看>>
php开发常用指令集合
查看>>
压力测试的轻量级具体做法
查看>>
Java之dom4j的简单解析和生成xml的应用
查看>>
SHELL十三问[转载自CU论坛]
查看>>
Linux文件传输scp和rsync断点续传
查看>>
现代软件工程—构建之法---第五章:练习与讨论
查看>>