hdu-3833 YY's new problem(数组标记)
http://acm.hdu.edu.cn/showproblem.php?pid=3833
做这题时是因为我在网上找杭电的数论题然后看到说这道题是数论题就点开看了以下。
然后去杭电上做,暴力,超时了,想了半天还是没啥好办法,到底哪要用到数论的知识呢,想不出还得去搜题解,脑子笨啊。
然后说用hash再报暴力,没看人家代码,然后就顺着这思路写,我写的是当前是a[i];然后j从1到i-1,用2*a[i]-a[j]的另一个数并且这个数的范围为1到N;而且在1到i-1中没出现过
那么必定在i的右侧,这个可以用hash数组记录一下,在1到i出现的a[i]都标记为1;也就是hash[a[i]]=1;
那么如过相减所得的数在a[i]的后面那么hash[2*a[i]-a[j]]==0;那么只要这个成立就可跳出,那么就有解。
哈哈,超时了这个复杂度基本上还是(n*n);
后来看了一下别人的代码,我觉得复杂程度还是没降,可为啥就过了?
希望知道的能指导下;
1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<stdlib.h>
5 #include<string.h>
6 #include<math.h>
7 const int N=10005;
8 using namespace std;
9 int flag[N];//hash数组
10 int a[N];
11 int main(void)
12 {
13 int i,j,k,p,q,pp;
14 scanf("%d",&k);
15 while(k--)
16 {
17 memset(flag,0,sizeof(flag));
18 pp=0;
19 scanf("%d",&p);
20
21 for(i=1; i<=p; i++)
22 {
23 scanf("%d",&a[i]);
24 if(pp)
25 {
26 continue;
27 }
28 flag[a[i]]=1;
29 if(i>=2)
30 {
31 for(j=1; j<a[i]&&a[i]+j<=p; j++)
32 {
33
34 if(flag[j+a[i]]+flag[a[i]-j]==1)//找关于a[i]对称的也就是与a[i]的间距的数时否在a[i]的两端.
35 {
36 pp=1;
37 break;
38 }
39 }
40 }
41
42 }//我认为上面的复杂度为(p+2)*p/4;我认为基本上还是p*p的,如过知道咋分析的教我一下
43 if(pp)
44 {
45 printf("Y\n");
46 }
47 else printf("N\n");
48
49 }
50 return 0;
51 }
hdu-3833 YY's new problem(数组标记)的更多相关文章
- HDU 3833 YY's new problem ()
YY's new problem Time Limit: 12000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- HDU 3833 YY's new problem(换种思路的模拟,防超时)
题目链接 用p[a]保存的是输入的a在第p[a]个, 然后根据差值查找. #include<stdio.h> #include<string.h> int main() { ...
- G - YY's new problem(HUSH算法,目前还不懂什么是HUSH算法)
Time Limit:4000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status Pra ...
- hdoj 2579 Dating with girls(2)【三重数组标记去重】
Dating with girls(2) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- hdu 2642 二维树状数组 单点更新区间查询 模板水题
Stars Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/65536 K (Java/Others) Total Subm ...
- HDU 1231.最大连续子序列-dp+位置标记
最大连续子序列 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- hdu 3553 Just a String (后缀数组)
hdu 3553 Just a String (后缀数组) 题意:很简单,问一个字符串的第k大的子串是谁. 解题思路:后缀数组.先预处理一遍,把能算的都算出来.将后缀按sa排序,假如我们知道答案在那个 ...
- HDU 4974 A simple water problem(贪心)
HDU 4974 A simple water problem pid=4974" target="_blank" style="">题目链接 ...
- HDU 5572 An Easy Physics Problem (计算几何+对称点模板)
HDU 5572 An Easy Physics Problem (计算几何) 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5572 Descripti ...
随机推荐
- 使用systemd将iptables规则在docker启动后自动导入
编写systemd文件 $ sudo vi /etc/systemd/system/iptables-import.service # /etc/systemd/system/iptables-imp ...
- Yarn 容量调度器多队列提交案例
目录 Yarn 容量调度器多队列提交案例 需求 配置多队列的容量调度器 1 修改如下配置 SecureCRT的上传和下载 2 上传到集群并分发 3 重启Yarn或yarn rmadmin -refre ...
- python生成器浅析
A 'generator' is a function which returns a generator iterator. It looks like a normal function exce ...
- C++之数组转换
题目如下: 这道题经过好久的思考也没找到能一次性输入两组数的方法,只能一次性处理一组数,所以就把代码放上来,欢迎交流留言一起讨论可以放两组数的方法~(QQ 841587906) 1 #include ...
- linux之sar命令详解
sar(System Activity Reporter系统活动情况报告)是目前Linux上最为全面的系统性能分析工具之一,可以从多个方面对系统的活动进行报告,包括:文件的读写情况.系统调用的使用情况 ...
- mybatis缓存+aop出现的问题
在对某些特殊数据进行转换时,getOne方法后执行fieleInfoHandle进行转换,如果直接使用fixedTableData进行操作,没有后续的二次调用这样是没问题的,但是在后面当执行完upda ...
- OpenStack之六: plancement服务(端口8778)
官网地址:https://docs.openstack.org/placement/stein/install/install-rdo.html #:创建placement库,并授权 MariaDB ...
- 注解开发中的@Results注解使用
package com.hope.dao;import com.hope.domain.User;import com.sun.xml.internal.bind.v2.model.core.ID;i ...
- [MySQL实战-Mysql基础篇]-mysql架构
1.基本组成 下面是mysql的基本架构示意图 图一 图二 我们可以从图上看出,mysql大体分为两个部分,一个是server层,另一个是引擎层. server层中包含了连接器.查询缓存.分析器.优 ...
- JDK的简介,卸载和安装过程
JDK的简介,卸载和安装过程 JDK JRE JVM JDK:Java Development Kit JRE:Java Runtime Environment JVM:Java Virtual Ma ...