标签: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;
}
}
标签:def 列排序 lse ret code using cin 有序 out
原文地址:https://www.cnblogs.com/asanagiyantia/p/12952525.html