zoj 3197 Google Book
这道题告诉我想法正确是多么重要,先是我自己想的时候没考虑到最后的页码作为循环的终止,我一直以区间个数来终止循环,这是多么愚蠢啊!然后,我看了别人的代码,但是很不幸超时了!
我自己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的更多相关文章
- Google, FaceBook, Amazon 加州求职记 (转)
http://blog.csdn.net/ithomer/article/details/8774006 http://www.myvisajobs.com 一年多前,出于显而易见的原因,下定决心肉身 ...
- 九度OJ 1006:ZOJ问题 (递归)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:18621 解决:3197 题目描述: 对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC. 是否AC的规则如下: 1. ...
- Linux 利用Google Authenticator实现ssh登录双因素认证
1.介绍 双因素认证:双因素身份认证就是通过你所知道再加上你所能拥有的这二个要素组合到一起才能发挥作用的身份认证系统.双因素认证是一种采用时间同步技术的系统,采用了基于时间.事件和密钥三变量而产生的一 ...
- linux上使用google身份验证器(简版)
系统:centos6.6 下载google身份验证包google-authenticator-master(其实只是一个.zip文件,在windwos下解压,然后传进linux) #cd /data/ ...
- Google软件构建工具Bazel原理及使用方法介绍
近期,Google开源了强大的自动化构建工具Bazel. 正好博主近期在使用china版的Bazel--腾讯自主开发的Blade,所以准备跟大家分享一下Google Bazel这个分布式构建系统的原理 ...
- Google Java编程库Guava介绍
本系列想介绍下Java下开源的优秀编程库--Guava[ˈgwɑːvə].它包含了Google在Java项目中使用一些核心库,包含集合(Collections),缓存(Caching),并发编程库(C ...
- 序列化笔记之一:Google的Protocol Buffer格式分析
从公开介绍来看,ProtocolBuffer(PB)是google 的一种数据交换的格式,它独立于语言,独立于平台.作为一个学了多年通信的人,ProtocolBuffer在我看来是一种信源编码.所谓信 ...
- [异常解决] 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 ...
- Google翻译之路
如何将整个网站都翻译成某种语言,想必大家都有碰到这样的问题吧. 如果能够访问Google的话, 那这个太容易不过了. 来看,下面的就是Google提供的直接翻译某个网站. http://transla ...
随机推荐
- TLSAlloc()
为什么要有TLS?原因在于,进程中的全局变量与函数内定义的静态(static)变量,是各个线程都可以访问的共享变量.在一个线程修改的内存内容,对所有线程都生效.这是一个优点也是一个缺点.说它是优点,线 ...
- Qt 的线程与事件循环——可打印threadid进行观察槽函数到底是在哪个线程里执行,学习moveToThread的使用)
周末天冷,索性把电脑抱到床上上网,这几天看了 dbzhang800 博客关于 Qt 事件循环的几篇 Blog,发现自己对 Qt 的事件循环有不少误解.从来只看到现象,这次借 dbzhang800 的博 ...
- Linux-storage-stack-diagram
just a diagram 一目了然. 对于isci 只是用过LIO和STGT 两种后端. 这里有各种后端的比较. http://scst.sourceforge.net/comparison.ht ...
- oracle字符集
oracle server端字符集
- yum subversion puppet puppet-server
yum -y install ruby ruby-libs ruby-shadow yum -y install puppet puppet-server facter yum -y install ...
- spring NotWritablePropertyException异常
Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'userDao' of bea ...
- Java中使用Observer接口和Observable类实践Observer观察者模式
在Java中通过Observable类和Observer接口实现了观察者模式.实现Observer接口的对象是观察者,继承Observable的对象是被观察者. 1. 实现观察者模式 实现观察者模式非 ...
- Oracle树反向查询的优化(转载)
本文系转载,http://technology.amis.nl/2005/08/11/selecting-a-pruned-tree-with-selected-nodes-and-all-their ...
- csapp lab3 bufbomb 缓存区溢出攻击 《深入理解计算机系统》
这个实验主要是熟悉栈,和了解数据缓存区溢出的问题. 数据缓存区溢出:程序每次调用函数时,会把当前的eip指针保存在栈里面,作为被调用函数返回时的程序指针.在被调用程序里面,栈是向下增长的.所有局部变量 ...
- Apache 编译扩展的方法
下载源码包 进入源码包的modules目录 选择你要编译的.c文件 eg: /home/work/local/apache/bin/apxs -c -i -a mod_proxy_http.c 选项说 ...