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题, 总会有些收获, 慢慢进步.

 

 

题目

 

 

 

Examples
input
6
2 1 5 2 7 4
output
YES
2 3 1 6 
input
5
1 3 1 9 20
output
NO
Note

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;
} 

 

posted @ 2021-03-14 18:58  la-la-wanf  阅读(117)  评论(0编辑  收藏  举报