#include<bits/stdc++.h>
#define lyh(i,a,b) for(int i=a;i<b;++i)
using namespace std;
int main(){
int n;
int lst=-1;
cin>>n;
int mx=0,mi=0;
lyh(i,0,n)
{
int tmp;
cin>>tmp;
if(tmp!=lst){
mi+=tmp;
lst=tmp;
}
mx+=tmp;
}
cout<<mx<<endl<<mi;
}
2.只有70分,暴力模拟的
#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
int n;
int a[500001];
int b[500001];
void st(int x){
for(int i=0;i<n;i++)
if(a[i]<x)
b[i]=0;
else
b[i]=a[i];
}
int gt(){
int ans=0;
for(int i=0;i<n;){
int j;
for(j=i;j<n&&b[j]==0;j++) ;
for(;j<n&&b[j]!=0;j++) ;
ans++;
i=j;
}
if(b[n-1]==0) ans--;
return ans;
}
int main(){
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
scanf("%d",&n);
int mx=0,mi=INF;
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
mx=max(a[i],mx);
mi=min(a[i],mi);
}
int ans=0;
for(int i=mi;i<=mx;i++){
st(i);
ans=max(ans,gt());
}
cout<<ans<<endl;
}
2021/12/4
看了题解我又来了:
详细思路请看注释
#include<iostream>
#include<algorithm>
#include<vector>
#include<map>
using namespace std;
int main(){
int n;
cin>>n;
vector<int> a,b;
a.push_back(0);
for(int i=0;i<n;i++){
int t;
cin>>t;
a.push_back(t);
}
a.push_back(0);
// 1.去重
for(int i=0;i<a.size();){
int j=i;
while(j<a.size()&&a[i]==a[j]) j++;
b.push_back(a[i]);
i=j;
}
// 2.考虑若x从最大值到最小值到最大值递增,且当前非零段个数为ans
// 有点像海水从下往上涨
// 若高度为x的一项的左右都比它高,则ans+1
// 若高度为x的一项的左右都比他低,则ans-1
// 因此我们需要统计出所有高度下,左右比他高/低的点的数量
map<int,int> big,small;
for(int i=1;i+1<b.size();i++){
if(b[i-1]<b[i]&&b[i]>b[i+1]) big[b[i]]++;
if(b[i-1]>b[i]&&b[i+1]>b[i]) small[b[i]]++;
}
int ans=0,tp=0;// 初始化ans
// 因为已去重了,因此非0段个数=不在边界的0的个数+1
tp=ans=count(b.begin()+1,b.end()-1,0)+1;
for(int i=1;i<10001;i++){
tp+=(small[i]-big[i]);
ans=max(ans,tp);
}
cout<<ans<<endl;
}
模拟题记得:
认真读题,先按照自己的思路观察一下样例,然后再上手敲
结构体或者类需要做初始化
模拟题的坑很多,一个细节不注意就全错(哭了
编译错误时,看看是不是有变量名或者函数名是保留字
#include<bits/stdc++.h>
using namespace std;
//最终得分 66
static unsigned long nxt = 1;
#define ll long long
#define INF 0x3f3f3f3f
/* RAND_MAX assumed to be 32767 */
int myrand(void) {
nxt = nxt * 1103515245 + 12345;
return((unsigned)(nxt/65536) % 32768);
}
#define de(a) cout<<#a<<"="<<a<<endl;
int t;
double dt;
ll N,S,P,T;
class SJY{
public:
double vk,uk,ik;
double a,b,c,d;
ll k;
ll ct;
vector<int> to;
bool updt(){
double v=vk,u=uk;
vk=v+dt*(0.04*v*v+5*v+140-u)+ik;
uk=u+dt*a*(b*v-u);
ik=0;
if(vk>=30){
vk=c;
uk+=d;
ct++;
return 1;
}
return 0;
}
SJY(){
vk=uk=ik=0;
a=b=c=d=0;
k=ct=0;
}
}sjy[1001];
class TC{
public:
ll d;
double w;
ll e;
TC(){
d=e=0;
w=0;
}
}tc[1001];
class MCY{
public:
ll r;
vector<int> to;
MCY(){
r=0;
}
}mcy[1001];
struct node{
ll k;
double w;
ll e;
bool operator<(const node &n) const{
return n.k<k;
}
};
int main(){
cin>>N>>S>>P>>T;
cin>>dt;
for(int i=0;i<N;){
int rn;
double v,u,a,b,c,d;
cin>>rn>>v>>u>>a>>b>>c>>d;
for(int j=i;j<i+rn;j++){
sjy[j].vk=v;
sjy[j].uk=u;
sjy[j].a=a;
sjy[j].b=b;
sjy[j].c=c;
sjy[j].d=d;
}
i+=rn;
}
for(int i=0;i<P;i++){
cin>>mcy[i].r;
}
for(int i=0;i<S;i++){
int s;
cin>>s>>tc[i].e>>tc[i].w>>tc[i].d;
if(s<N){
sjy[s].to.push_back(i);
}else{
mcy[s-N].to.push_back(i);
}
}
// 1.处理所有脉冲源
// 2.处理所有神经元的输入
// 3.处理神经元的输出
priority_queue<node> q;
for(t=1;t<=T;t++){
for(int i=0;i<P;i++)
{
if(myrand()<=mcy[i].r)
{ //k w e
// cout<<"脉冲源"<<i<<"输出"<<endl;
for(int j=0;j<mcy[i].to.size();j++)
{
TC tcc=tc[mcy[i].to[j]];
q.push((node){tcc.d+t,tcc.w,tcc.e});
}
}
}
// de(q.size());
while(q.size()&&q.top().k==t)
{
node tp=q.top();
q.pop();
// cout<<"更新神经元"<<endl;
sjy[tp.e].ik+=tp.w;
//de(sjy[tp.e].ik);
sjy[tp.e].k=tp.k;
}
//de(q.size());
for(int i=0;i<N;i++){
if(sjy[i].updt())
{
//cout<<"神经元"<<i<<"输出"<<endl;
for(int j=0;j<sjy[i].to.size();j++){
TC tcc=tc[sjy[i].to[j]];
q.push((node){t+tcc.d,tcc.w,tcc.e});
}
}
}
//cout<<endl;
}
double vmin=INF,vmax=-INF;
ll ctmin=INF,ctmax=-INF;
for(int i=0;i<N;i++){
vmin=min(vmin,sjy[i].vk);
vmax=max(vmax,sjy[i].vk);
ctmin=min(ctmin,sjy[i].ct);
ctmax=max(ctmax,sjy[i].ct);
}
printf("%.3llf %.3llf\n",vmin,vmax);
cout<<ctmin<<" "<<ctmax<<endl;
}