这道题告诉我想法正确是多么重要,先是我自己想的时候没考虑到最后的页码作为循环的终止,我一直以区间个数来终止循环,这是多么愚蠢啊!然后,我看了别人的代码,但是很不幸超时了!

我自己wa的代码,我感觉很正确就是对不了!


#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int cmp(const void *a,const void *b)
{
return (*(int *)a-*(int *)b);
} int main(void)
{
int t,n,i,j,count,k,temp;
int s[5002][2];
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d%d",&s[i][0],&s[i][1]);
qsort(s,n,sizeof(s[0]),cmp);
count=0;
for(i=0,k=1;i<n&&k<n;)
{
if(s[i][1]>=s[k][1])/*盖住后面的 */
{
k++;
count++;
}
else if(s[i][0]==s[k][0]&&s[i][1]<=s[k][1])/*被后面盖住 */
{
/*如果i被k盖住,说明中间的全部被覆盖了*/
i=k;/*k后移一位,i移到k位置*/
k++;
count++;
}
else
{
i=k;/*k后移一位,i移到k位置*/
k++;
}
}
printf("%d\n",n-count); }
return 0;
}
 

然后我就看网上的算法,然后改了,不过居然超时了

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int cmp(const void *a,const void *b)
{
return (*(int *)a-*(int *)b);
}
int s[][];
int main(void)
{
int t,n,i,j,count,k,temp,end,sta,sum,ma; scanf("%d",&t);
while(t--)
{
scanf("%d",&n); for(i=;i<n;i++)
scanf("%d%d",&s[i][],&s[i][]); qsort(s,n,sizeof(s[]),cmp);
ma=;
end = s[][],sta = s[][];/*得到比较的开始,和结束地址 */
sum = ;/*区间个数从1开始 */
i = ;
while(i<n && s[i][] == sta)/*找到以1为开始区间群中最大那一页页码 */
{
if(end < s[i][]) {
end = s[i][];
ma=i;
} ;
i++;
}
while(end!=n)/*当找到的页码等于最后的页码就可以停止循环 */
{
j=s[ma][];/*得到当前以i为开始区间群中最大的页码 */
sta = end+;/*查找的页码从上一个区间群中的最后一个开始 */
i++;/*获取当前区间群的第一个 */
while(i<n && s[i][] <= sta)/*找打这个区间群中最大的 j*/
{
if(s[i][] > j)
{
j = s[i][];
ma=i;
}
i++;
}
if(j > end)/*如果区间群中最大的大于上一个区间群的最大,那么就需要增加一个了 */
{
sum++;
end = j;
}
}
printf("%d\n",sum); }
return ;
}

最后实在没办法了,只能再找了,终于看到了一个最ok的了,就是在已经排好的区间中找多少个尾部递增序列,很轻松的解决了这题,我靠怎么都没想过这种方法!想法正确真的很重要

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int cmp(const void *a,const void *b)
{
return (*(int *)a-*(int *)b);
}
int s[][];
int main(void)
{
int t,n,i,j,end,sta,sum,p,max; scanf("%d",&t); while(t--)
{
scanf("%d",&end);/*最后的页码号*/ for(i=;i<end;++i)
{
scanf("%d %d",&s[i][],&s[i][]);
} qsort(s,end,sizeof(s[]),cmp); n= ;
p= ;
sum= ; while(sum<=end)
{ max=- ;/*每一次求新递增序列的最大值,这个值就需要初始化*/ for(i=p;i<end;++i)/*循环页码区间,找到连续递增最大的页码*/
{
if(s[i][]<=sum)
{
if((s[i][]>=sum)&&(s[i][]>max))/*更新最大的页码*/
{
max=s[i][] ;
}
}
else /*如果页码递减就跳出*/
break ;
} sum=max+ ;/*在后面递增区间中找出比前一个递增最大值,大1的页码*/
p=i ;/*跳到最大区间后面*/
++n ;/*每一次找新递增序列的最大,就代表前面序列区间内查最大的就可以了,所以加1*/
} printf("%d\n",n); }
return ;
}

zoj 3197 Google Book的更多相关文章

  1. Google, FaceBook, Amazon 加州求职记 (转)

    http://blog.csdn.net/ithomer/article/details/8774006 http://www.myvisajobs.com 一年多前,出于显而易见的原因,下定决心肉身 ...

  2. 九度OJ 1006:ZOJ问题 (递归)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:18621 解决:3197 题目描述: 对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC. 是否AC的规则如下: 1. ...

  3. Linux 利用Google Authenticator实现ssh登录双因素认证

    1.介绍 双因素认证:双因素身份认证就是通过你所知道再加上你所能拥有的这二个要素组合到一起才能发挥作用的身份认证系统.双因素认证是一种采用时间同步技术的系统,采用了基于时间.事件和密钥三变量而产生的一 ...

  4. linux上使用google身份验证器(简版)

    系统:centos6.6 下载google身份验证包google-authenticator-master(其实只是一个.zip文件,在windwos下解压,然后传进linux) #cd /data/ ...

  5. Google软件构建工具Bazel原理及使用方法介绍

    近期,Google开源了强大的自动化构建工具Bazel. 正好博主近期在使用china版的Bazel--腾讯自主开发的Blade,所以准备跟大家分享一下Google Bazel这个分布式构建系统的原理 ...

  6. Google Java编程库Guava介绍

    本系列想介绍下Java下开源的优秀编程库--Guava[ˈgwɑːvə].它包含了Google在Java项目中使用一些核心库,包含集合(Collections),缓存(Caching),并发编程库(C ...

  7. 序列化笔记之一:Google的Protocol Buffer格式分析

    从公开介绍来看,ProtocolBuffer(PB)是google 的一种数据交换的格式,它独立于语言,独立于平台.作为一个学了多年通信的人,ProtocolBuffer在我看来是一种信源编码.所谓信 ...

  8. [异常解决] How make ubuntu use Google Search

    1.Download the hosts file fromhttps://laod.cn/hosts/2016-google-hosts.html [1] 2.Write a bash shell ...

  9. Google翻译之路

    如何将整个网站都翻译成某种语言,想必大家都有碰到这样的问题吧. 如果能够访问Google的话, 那这个太容易不过了. 来看,下面的就是Google提供的直接翻译某个网站. http://transla ...

随机推荐

  1. SD和SDHC和SDXC卡的区别是什么

    SD卡,SDHC卡,SDXC卡区别在规格不一样,SD卡最大支持2GB容量,SDHC 最大支持32GB容量,SDXC 最大支持2TB(2048GB)容量,支持SDXC卡的数码设备是兼容支持SD卡与SDH ...

  2. 04737_C++程序设计_第6章_继承和派生

    例6.1 使用默认内联函数实现单一继承. #include<iostream> using namespace std; class Point { private: int x, y; ...

  3. hibernate中文查询时无查询结果

    原因很简单,问题在于我连接mysql用的url时,没有指定字符集,导致查询不到任何数据 问题出在 hibernate.xml配置文件中: 将 <property name="jdbcU ...

  4. tigervnc*

    yum install -y tigervnc* tigervnc-server vncserver www.webmin.cn http://blog.sina.com.cn/s/blog_4ba5 ...

  5. English - in the light of(按照,根据)与according to的区别是什么

    according to 表示as stated by 像陈述的那样 如According to Sarah they're not getting on very well at the momen ...

  6. 【转】在SQL Server 2008中SA密码丢失了怎么办?

    sql server 2008的sa用户莫名其妙就登陆不进去了.提示如下: 以上提示就表明是密码错误,但密码我可是记得牢牢的,也许是系统被黑的原因吧.一直以来我的Windows身份验证就用不起,以下方 ...

  7. C#反序列化json字符串时,提示:应为来自命名空间“”的元素“root”。。遇到名称为“”、命名空间为“”的“None”。

    反序列化调用接口返回的字符串时,出现:应为来自命名空间“”的元素“root”..遇到名称为“”.命名空间为“”的“None”.,导致反序列化数据失败,这种失败并有时候并不会直接提示反序列化失败(抛异常 ...

  8. BZOJ 3110: [Zjoi2013]K大数查询( 树状数组套主席树 )

    BIT+(可持久化)权值线段树, 用到了BIT的差分技巧. 时间复杂度O(Nlog^2(N)) ---------------------------------------------------- ...

  9. javascript笔记—面向对象

    什么是对象: 对象是一个整体,对外提供一些操作. 什么是面向对象: 使用对象时,只关注对象提供的功能,不关注其内部细节,例如jquery 面向对象是一种通用思想,并非只有编程中能用,任何事情都可以用. ...

  10. 简单使用 PHP Phar 打包php代码 笔记

    Phar简介:Phar 归档的概念来自 Java™ 技术的 JAR 归档,它允许使用单个文件打包应用程序,这个文件中包含运行应用程序所需的所有东西.该文件不同于单个可执行文件,后者通常由编程语言生成, ...