题解 P4613 [COCI2017-2018#5] Olivander
Posted seashellbaylor
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题解 P4613 [COCI2017-2018#5] Olivander相关的知识,希望对你有一定的参考价值。
话说这道题,作为一个哈迷,是不能错过的
我很惊讶本蒟蒻竟然看得懂题面
好了,闲话少说,这道题,虽说是入门难度,但凭着良心说,它还是一道普及 - 的吧
看到标签,“高性能”,大脑的第一反应是快读。
是不是 如雷贯耳 ?
是不是 久仰大名 ?
是不是仔细想想,咦?快读到底是干嘛的? 尴尬
本蒟蒻查了一下,快读就是快速读入 (从字面上来理解)
咳咳,emm…… 快读的原理就是将一个整数转化为先输入一个字符,再将其转化为整数。大家应该都知道,字符 0 的 ASCII 码是 48 ,那么,所有字符数字对应的整数是否就应该转化为它的 ACSII 码减去48 ( 即字符 ‘0‘ ) 呢?(从本义上来理解)
显然是的。
那么,具体应该怎么实现呢?
int read()//快读
int r=0,f=1;//r为计数器,f为标志,看是正数还是负数
char c=getchar();//先入c
while((c<‘0‘||c>‘9‘)&&c!=‘-‘)
c=getchar();//为别的符号时直接读入,不管它是什么
if(c==‘-‘)//如果读入了负号,标记置-1,为后来做铺垫
f=-1,c=getchar();
while(c<=‘9‘&&c>=‘0‘)//正式读入数字
r=r*10+c-‘0‘,c=getchar();//r开始增加,转化为多位数
return r*f;//若f=1则为正数,f=-1为负数
是不是很容易理解?
还有一个知识点,就是
排序!!!
所谓排序,就是将数组按规定顺序 (从小到大或从大到小,以及其他) 排列
如果你的第一个下标为0,则排序为这样的:( 在函数库里规定为从小到大 )
sort(a,a+n);//n为元素个数
若为1,则是:
sort(a+1,a+1+n);
这里补充一下如果你要按从大到小排序应该怎样做:
//先定义自函数
int cmp(int a,int b)
return a>b;
//再排序
sort(a+1,a+1+n,cmp);
好了,本题的知识点都讲完了。 应该是我太蒟才没发现其他知识点
下面放出完整代码:( 我没开O2也没事? 应该没事,本人亲测)
#include<cstdio>
#include<algorithm>//不要在意头文件
#define maxn 101//定义maxn的值,即a与b数组的元素最多多少个
using namespace std;//本蒟蒻总会写这个
int n,a[maxn],b[maxn],i;
int read()//快读万岁
int r=0,f=1;
char c=getchar();
while((c<‘0‘||c>‘9‘)&&c!=‘-‘)
c=getchar();
if(c==‘-‘)
f=-1,c=getchar();
while(c<=‘9‘&&c>=‘0‘)
r=r*10+c-‘0‘,c=getchar();
return r*f;
int main()
n=read();//在用read函数时读入方法,get一下
for(i=1;i<=n;i++)
a[i]=read();//同上
for(i=1;i<=n;i++)
b[i]=read();//同上
sort(a+1,a+1+n);//排序 ( 我的第一个下标是1,所以这样排序 )
sort(b+1,b+1+n);//这里也是
for(i=1;i<=n;i++)
if(a[i]>b[i])//如果魔杖放不下
printf("NE");//不满足题意直接拜拜,输出"NE"
return 0;
printf("DA");//检查完再输出"DA"
return 0;
OI 加油!洛谷冲鸭!
以上是关于题解 P4613 [COCI2017-2018#5] Olivander的主要内容,如果未能解决你的问题,请参考以下文章