Codeforces Round #707 (Div. 2)A.英语漏洞 + C.Going Home C题收获不小
A题英语漏洞
A题传送门: https://codeforces.com/contest/1501/problem/A
其实题目说的很明白, 只是我傻傻的会错了意, 话不多说, 开整.
前两行是说, 火车从i - 1站到 i 站所需时间,
下面的1说的是它在车站上的时间至少为⌈bi−ai⌉/2(除法用上限, 简言之就是带小数的去掉小数, 再加一)
要计算到达的时间, 显然就是这两者之和了, 我当时哈哈, 就判断时间是否大于等于这个第一条, 真爽, 看了半天没用的
传送门_C题: https://codeforces.com/contest/1501/problem/C
前言
一直以来, 做出c题的的次数不多, 但还是有看c题的时间的, 往后还是要和现在这样, 每次做完补掉c题, 总会有些收获, 慢慢进步.
题目
6 2 1 5 2 7 4
YES 2 3 1 6
5 1 3 1 9 20
NO
In the first example a2+a3=1+5=2+4=a1+a6a2+a3=1+5=2+4=a1+a6. Note that there are other answer, for example, 2 3 4 6.
In the second example, we can't choose four indices. The answer 1 2 2 3 is wrong, because indices should be different, despite that a1+a2=1+3=3+1=a2+a3
题意
仅一个输入样例, 需要在这n个数里找到四个数, 使得ax+ay=az+aw
收获
因为就一个输入样例,那就运行时间没这么长了,可以稍微放心大胆的弄下, n^2还是可以的.
还有就是这次颠覆了我怕数组开的太大的认知, 全局变量开到4e8, 丝毫没有问题, 运行时间的不足用存储来补, 哈哈.
而且,其实,我还没在主函数写过两个return呢,往后方便的时候试试.
又是有收获的一次cf, 开心~~
解析
来个n^2的遍历, 对于每次ax+ay都在数组里记录下值的大小, 并保留i, j的值, 像这样
x[s]=i;y[s]=j;//s=ax+ay
那么最后, 只要保证x[s]和y[s]!=0, 并且四个数序号不重复即可.
AC代码(代码还是很短的)
#include<iostream>
using namespace std;
int n;
int x[5000003],y[5000003],a[2500003];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i)scanf("%d",&a[i]);
for(int i=1;i<=n;++i){
for(int j=i+1;j<=n;++j){
int s=a[i]+a[j];
if(x[s]&&x[s]!=i&&x[s]!=j&&y[s]!=i&&y[s]!=j){
printf("YES\n%d %d %d %d",i,j,x[s],y[s]);
return 0;
}
x[s]=i;y[s]=j;
}
}
printf("NO\n");
return 0;
}