E-降温(easy)
题意:如果前一天温度比后一天温度>=x就是一场寒潮,有些日子的气温是未知的,求发生寒潮的最大值和最小值是多少。每天气温的值域在-50到50.
分析:如果ai为未知数,最大:让ai=a[i-1]-x。最小:让bi=b[i-1]-x+1
代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; void sol(){ int n,x;cin>>n>>x; int a[n+10],b[n+10]; for(int i=1;i<=n;i++){ cin>>a[i]; b[i]=a[i]; } ll ma=0; for(int i=1;i<=n;i++){ if(i==1){ if(a[i]==-999)a[i]=50; continue; } if(a[i]!=-999){ if(a[i-1]-a[i]>=x)ma++; } else{ if(a[i-1]-x>=-50){ a[i]=a[i-1]-x; ma++; } else a[i]=50; } } ll mi=0; for(int i=1;i<=n;i++){ if(i==1){ if(b[i]==-999)b[i]=-50; continue; } if(b[i]!=-999){ if(b[i-1]-b[i]>=x){ mi++; } } else b[i]=max(-50,b[i-1]-x+1); } cout<<ma<<" "<<mi<<endl; } int main() { ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); int t=1; while(t--)sol(); return 0; }
F-降温(hard)
题意:与e相同,数据不同,修改即可
代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; void sol(){ int n,x;cin>>n>>x; int a[n+10],b[n+10]; for(int i=1;i<=n;i++){ cin>>a[i]; b[i]=a[i]; } ll ma=0; for(int i=1;i<=n;i++){ if(i==1){ if(a[i]==-999999999)a[i]=5e8; continue; } if(a[i]!=-999999999){ if(a[i-1]-a[i]>=x)ma++; } else{ if(a[i-1]-x>=-5e8){ a[i]=a[i-1]-x; ma++; } else a[i]=5e8; } } ll mi=0; for(int i=1;i<=n;i++){ if(i==1){ if(b[i]==-999999999)b[i]=-5e8; continue; } if(b[i]!=-999999999){ if(b[i-1]-b[i]>=x){ mi++; } } else b[i]=max((ll)-5e8,(ll)b[i-1]-x+1); } cout<<ma<<" "<<mi<<endl; } int main() { ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); int t=1; while(t--)sol(); return 0; }