题解 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 加油!洛谷冲鸭!

猜你喜欢

转载自www.cnblogs.com/SeashellBaylor/p/11079814.html