NWERC 2019 题解

Posted asanagiyantia

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NWERC 2019 题解相关的知识,希望对你有一定的参考价值。

做出5题
I . 前20分钟的策略是将原序列排序后,观察排序后的下标id,与原先的下标id和是否为定值或一致。由于其过于复杂,无法实现,30分钟更换思路,从左向右,不下降序列直至s,从右向左下降序列直至t,然后将s和t的指针移位至首先出现as的数,判断a[s]<=[t+1] 且 a[t]>a[s-1] (若s为首项则不判断t,若t是尾项也不判断s)。然后观察s...t区间是否有序
42:12 (+)

#include <bits/stdc++.h>
using namespace std;
#define maxn 1000006
int s,t;
int a[maxn];
int main(){
    int n;
    cin>>n;
    for (int i=1;i<=n;i++){
        cin>>a[i];
    }
    s=1;
    for (int i=2;i<=n;i++){
        if (a[i]>=a[i-1]) s=i;
        else break;
    }
    if (s==n) {cout<<"1 1"; return 0;}
    t=n;
    for (int i=n;i>=2;i--){
        if (a[i]>=a[i-1]) t=i-1;
        else break;
    }
    while (a[s]==a[s-1] && s-1>=1) {s--;}
    while (a[t]==a[t+1] && t+1<=n) t++;
    if ((s>1 && t<n) && (a[s]>a[t+1] || a[t]<a[s-1])) {cout<<"impossible"; return 0;}
    for (int i=s+1;i<=t;i++) if (a[i]>a[i-1]) {cout<<"impossible"; return 0;}
    cout<<s<<" "<<t<<endl;
 }

十足的水题,思路清楚可以秒过。


E:
不加EPS可过,加了过不了。汗

#include <bits/stdc++.h>
#define double long double
using namespace std;
double a[4];
const double EPS=1e-6;
int main(){
    cin>>a[0]>>a[1]>>a[2]>>a[3];
    sort(a,a+4);
    double tar_score;
    cin>>tar_score;
    double minn=a[0]+a[1]+a[2];
    minn/=3;
    double maxx=a[1]+a[2]+a[3];
    maxx/=3;
    if (tar_score>=maxx) cout<<"infinite";
    else
        if (tar_score<minn) cout<<"impossible";
    else
    {
        cout<<fixed<<setprecision(2)<<tar_score*3-a[1]-a[2]<<endl;
    }
}



以上是关于NWERC 2019 题解的主要内容,如果未能解决你的问题,请参考以下文章

NWERC 2017

2016-2017 ACM-ICPC Northwestern European Regional Programming Contest (NWERC 2016) 个人题解

2018-2019 ICPC Northwestern European Regional Programming Contest (NWERC 2018)

几何+矩形交——icpc nwerc 2019 I

几何+矩形交——icpc nwerc 2019 I

NWERC2016F - Free Weights