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 ...
 
随机推荐
- MYSQL 引擎的情况
			
方法 1: show engine innodb status; ------------------------------------------------------------------- ...
 - poj2039---写出c++reverse函数,且且依次输出每一行的第一个、第二个.....
			
#include <stdio.h> #include <stdlib.h> #include <string.h> void reverse(char *p1,c ...
 - linux 磁盘空间扩容 vg(+pv) lv(+空间) lv(缩减磁盘空间)
			
preFace APP scenario description: 当你未能合理的规划存储时,在后期的维护工作中可能会涉及的存储的 再规划(eg,某一个 or 数个App 对某一个lv 即挂载点写Bi ...
 - 关于cocos2d安装时编译不成功(个人心得)
			
在解压cocos2d执行vs2010.sln时错误发生不能成功生成.遇到这样的错误: 1>c:\program files\microsoft sdks\windows\v7.0a\includ ...
 - Tomcat配置一个ip绑定多个域名
			
在网上找了半天也没找到相关的资料,都说的太含糊. 本人对tomcat下配置 一ip对多域名的方法具体例如以下,按以下配置一定能成功,经过測试了. <Host name="localho ...
 - 权威指南学习心得-浏览器中的js
			
window对象:表示web了浏览器的一个窗口或窗体(winow属性引用自身) 含有以下属性:location包含Location对象,指定当前显示在窗口中URL,允许脚本往窗口里载入新的URL 含有 ...
 - SSH框架——Sprign声明式事务
			
Spring事务管理 Spring是SSH中的管理员,负责管理其它框架,协调各个部分的工作.今天一起学习一下Spring的事务管理.Spring的事务管理分为声明式跟编程式.声明式就是在Spring的 ...
 - USACO Section 4.3 Street Race(图的连通性+枚举)
			
虽说是IOI'95,但是也是挺水的..for 第一问,n最大为50,所以可以直接枚举起点和终点之外的所有点,然后dfs判断是否连通:for 第二问,易知答案一定是第一问的子集,所以从第一问中的答案中枚 ...
 - smarty函数-转载
			
Smarty常用函数 2009-08-13 14:05:55| 分类: Php |举报 |字号 订阅 1 .include_once语句: 引用文件路径,路径必需正确. eg:include ...
 - bootstrap你让前端小狮子们又喜又恨
			
看了一个用bootstrap框架建的页面,简直方便至极!各种添加类就可以实现各种功能,各种添加data-toggle让你不需要懂javascript就可以做出很炫的效果! 最重要的它做出来的页面还是响 ...