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

我自己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. (9)Xamarin测试账号申请与续用

    原文 Xamarin测试账号申请与续用 在Xamarin网站上可以申请30天试用的测试账号.试用期内,Xamarin会提供完整的功能试用. 30天试用时间到期后,在Visual Studio里面你加载 ...

  2. 每天学点Linux:一

    软链接和硬链接: 软链接,又称符号链接,它的原理是通过一个文本文件记录真实文件在系统中的位置,然后在文件操作的时候通过该地址查找原文件然后对其操作.类似于Windows里面的快捷方式.软链接可以链接不 ...

  3. poj2105---用指针对数组分块操作

    #include <stdio.h> #include <stdlib.h> ; int pow1(int a,int b) { ,i; ) ; ;i<b;i++) { ...

  4. ovs 实用案例

    建立gre,xvlan:http://networkstatic.net/configuring-vxlan-and-gre-tunnels-on-openvswitch/ vm之间通过gre通信:h ...

  5. 二叉树的实现 -- 数据结构与算法的javascript描述 第十章

    /** * 树,一种非线性的数据结构. 以分层的方式存储数据. * 一棵树最上面的节点成为根节点,如果一个节点下面有多个节点,这个节点称为父节点,下面的节点称为子节点 * 没有任何子节点的节点,陈宝国 ...

  6. JavaScript对css样式表操作

    CSS样式表3种方式: 内嵌:写在html标签中的样式 :如:<p style="width:100px"> 内嵌</p> 内联:写在html 中<h ...

  7. 页面加载时,页面中DIV随之滑动出来;去掉页面滚动条

    <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&quo ...

  8. sqlserver字符串拆分(split)方法汇总

    --方法0:动态SQL法declare @s varchar(100),@sql varchar(1000)set @s='1,2,3,4,5,6,7,8,9,10'set @sql='select ...

  9. WP8.1开发系列之隐藏顶部状态栏

    StatusBar statusbar = StatusBar.GetForCurrentView(); await statusbar.HideAsync(); 只能在后台代码中实现,前台xaml不 ...

  10. 张孝祥Java高新技术汇总

    一.自动装箱和拆箱: 在Java中有8种基本数据类型:byte,short,int,long,float,double,char,boolean.而基本数据类型不是对象,这时人们给他们定义了包装类,使 ...