码迷,mamicode.com
首页 > 其他好文 > 详细

NWERC 2019 题解

时间:2020-05-24 21:14:18      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:def   列排序   lse   ret   code   using   cin   有序   out   

做出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 题解

标签:def   列排序   lse   ret   code   using   cin   有序   out   

原文地址:https://www.cnblogs.com/asanagiyantia/p/12952525.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!