首先看题目,好家伙,全英文

那么大致的题意就是。有几个城市同在一条线上(相当于在x轴上),max i是第i个城市到其他所有城市的距离中的最大值,min i也就是所有中最小的。

再看输入

第一行输入一个n(2 ≤ n ≤ 105),代表城市数量。第二行有n个数:x1, x2, ..., xn ( - 109 ≤ xi ≤ 109),代表每个城市的横坐标。

看一下输出

输出n行,每行输出两个数,代表第i个城市到其他所有城市的距离最小值min i、最大值max i。

那么,这道题是想干什么呢?

就是给你n个在x轴上的点,x坐标告诉你了,求每个点距离其他点的最小值与最大值。

读懂了题,那就比较好写了。

首先读入每个城市横坐标

for(i=; i<n; i++) {
cin>>x[i];
}

然后接下来分别求出每个max、min就可以了

for(i=; i<n; i++) {
int max=;
int min=inf;
for(j=; j<n; j++) {
if(abs(x[i]-x[j])>max&&i!=j)
max=abs(x[i]-x[j]);
if(abs(x[i]-x[j])<min&&i!=j)
min=abs(x[i]-x[j]);
}
cout<<min<<" "<<max<<endl;
}

inf在函数外定义为0x3f3f3f3f,代表无穷大。这里的思路就是:你要比每个点到其他点的距离,那就先定一个点,让这个点与其他的点比较,这就有了上面的内层for循环。

max初始值为0,min初始值无穷大,定的点初始为第一个点,把它与第二个点比较,那么距离为3,而这个3大于初始的max,那新的max就变成了3。3小于初始的min,拿新的min就为3。然后再拿定点和下一个点比较,距离为7,大于max,故新的max为7,不小于min,故min还是3。以此类推,最后这个定点距其他所有点的min就为3,max就为12。

然后我们就需要设置第二个点、第三个点······为定点来比较了,因此就有了外层的for循环。

上面的代码中,if判断里有i!=j,这是为了避免定点与定点相比,否则相比之后,得出距离为0,那么最后它的min值就会为0,是错的。

那么完整的代码奉上(由于用了for嵌套,怕卡时间,就取消了共用缓冲区,代码为 int main() { 下面的那两行)

#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
int x[];
int main() {
ios_base::sync_with_stdio(false);
cin.tie();
int n,i,j;
cin>>n;
for(i=; i<n; i++) {
cin>>x[i];
}
for(i=; i<n; i++) {
int max=;
int min=inf;
for(j=; j<n; j++) {
if(abs(x[i]-x[j])>max&&i!=j)
max=abs(x[i]-x[j]);
if(abs(x[i]-x[j])<min&&i!=j)
min=abs(x[i]-x[j]);
}
cout<<min<<" "<<max<<endl;
}
return ;
}

如果你提交这段代码,那么恭喜您喜提一个wa,至于原因我还没找到。这又是一道英文题,无法找网上的代码来借鉴。于是没办法,只有再写咯。其实写这段找min、max前,我的第一个思路是,因为这几个点都是按坐标顺序排着的,那么只用在它的位置上花功夫不就ok了吗。但当时感觉两个for循环找更稳,就没有细想。

那么从位置上来,需要考虑的就是两个东西。

首先。第一个点,它的max值一定是和最后一个点的差,min值一定是和第二个点的差。最后一个点也是这样,max值是和第一个点的差,min值是和倒数第二个点的差。

其次。中间的点的min值,一定是和相邻的点的差,需要找的就是到底是左边还是右边。max值一定是和第一个点或最后一个点的差。

那么如何找 到底是左边还是右边相邻点离中间点的距离更小?到底是第一个还是最后一个点离中间点距离更大?事实上,把要比较的两个值直接放入min() max()函数就ok啦。

cout<<x[]-x[]<<" "<<x[n-]-x[]<<endl;
for(i=; i<n-; i++)
cout<<min(x[i]-x[i-],x[i+]-x[i])<<" "<<max(x[i]-x[],x[n-]-x[i])<<endl;
cout<<x[n-]-x[n-]<<" "<<x[n-]-x[]<<endl;

显而易见,第一个点和最后一个点单独拿出来手动输出,中间的点,直接比较就ok

完整代码

#include<bits/stdc++.h>
using namespace std;
int x[];
int main() {
int n,i;
cin>>n;
for(i=; i<n; i++)
cin>>x[i];
cout<<x[]-x[]<<" "<<x[n-]-x[]<<endl;
for(i=; i<n-; i++)
cout<<min(x[i]-x[i-],x[i+]-x[i])<<" "<<max(x[i]-x[],x[n-]-x[i])<<endl;
cout<<x[n-]-x[n-]<<" "<<x[n-]-x[]<<endl;
return ;
}

ok ac

FJUT-1370 记录一次解题过程的更多相关文章

  1. 一个蒟蒻的解题过程记录——洛谷P1003 铺地毯

    这到题算是我“火线回归”后码的第一道题,病好了心情不错,发篇博客分享一下 目录: ·题目描述 ·题目分析 ·解题思路 ·代码实现 ·总结 ·题目描述: 为了准备一场特殊的颁奖典礼,组织者在会场的一片矩 ...

  2. A+B Format 思路及解题过程结果

    A+B Format 思路及解题过程结果 github链接 题目 解题思路 这个题目的难点在于每三位用逗号隔开,以及带不带负号的问题.第一个问题,我的解决办法是先通过取整来取数,再通过取余来去数.第二 ...

  3. CUDA 编程相关;tensorflow GPU 编程;关键知识点记录;CUDA 编译过程;NVCC

    本文章主要是记录,cuda 编程过程中遇到的相关概念,名字解释和问题:主要是是用来备忘: cuda PTX :并行线程执行(Parallel Thread eXecution,PTX)代码是编译后的G ...

  4. 记录 Allsec 解题过程

    开局打开URL:http://119.3.191.245:65532/#/allsecPlayGame,前去做游戏 游戏URL:http://119.3.191.245:8877/Login.php ...

  5. 记录visual Studio使用过程中的两个问题

    Visual Studio是Windows平台下进行项目管理和开发的终极利器.除了微软自家的技术外,新版的VS不但支持Javascript, Python的开发调试,甚至还支持了Android, iO ...

  6. 动态规划:HDU1160-FatMouse's Speed(记录动态规划状态转移过程)

    FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  7. 记录IOS入门的过程

    先说点私话.再进入正题吧,顺便抒发下情绪.公司传统业务不景气,而互联网正如火如荼,无奈被逼上梁山.開始学起了IOS编程.后来想想闲着也是闲着就学习学习呗.无奈公司确实不希望投入了.不愿意提供苹果电脑. ...

  8. iscc2016 mobile1-TurtleShell.apk解题过程

    拿到程序先运行,简单的验证输入的flag正确与否.jeb加载apk文件 实在库文件里面验证,所以ida加载之,so文件是加密的,所以看不到关键验证函数,百度搜了下libhackme.so,出来这篇文章 ...

  9. PAT----1001. A+B Format (20)解题过程

    1001. A+B Format (20) github链接 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B Calculate a + b and output t ...

随机推荐

  1. kindeditor编辑器微软雅黑样式font-family值变成&quot;

    http://www.100cm.cn/article-126-764.html kindeditor编辑器中选中文字, 修改字体(字体名称中带有空格, 例如"Microsoft YaHei ...

  2. ASP.NET一般登陆逻辑分享(01)

  3. git卡在Resolving deltas 100%的解决办法

    很多同学都有这样的问题.不知道是git的问题,还是tortoisegit的问题. 我的版本: Git-1.8.4-preview20130916 TortoiseGit-1.8.6.0-32bit 已 ...

  4. Python--day33--当面试时候问到如何解决黏包问题?的回答。

  5. java 使用反射调用可变参数方法

    使用反射操作对象-调用可变参数方法 要把可变参数都当做是其对应的数组类型参数; 如 show(XX... is)作为show(XX[] is)调用; 若可变参数元素类型是引用类型: JDK内部接收到参 ...

  6. Linux内核接口特定的类型

    内核中一些通常使用的数据类型有它们自己的 typedef 语句, 因此阻止了任何移植性问 题. 例如, 一个进程标识符 ( pid ) 常常是 pid_t 而不是 int. 使用 pid_t 屏蔽了任 ...

  7. JS事件委托(代理)学习笔记

    在开始之前我们先来熟悉一下HTML DOM addEventListener()方法,该方法用于向指定元素添加事件句柄.语法说明如下图所示: 主要想强调一下第三个参数useCapture,默认值为fa ...

  8. Linux 内核管理类

    一个类由一个 struct class 的实例来定义: struct class { char *name; struct class_attribute *class_attrs; struct c ...

  9. 类(class)和继承

    .继承之前的写法 ↓ ----------------------------------------------------------------------------------------- ...

  10. Microsoft Ignite The Tour Beijing 记录: Learn Connect Explore

    坦率的说,这是我第一次以讲师的身份参加微软的Ignite大会.同时我也很开心能作为微软社区MVP来参加这个活动.而我的演讲主题也和我的社区有关——Unity.C#以及跨平台开发. 这篇用来记录MSIg ...