第一题
201609-1
试题名称: 最大波动
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int num[1000]={};
int now=0;
int most=0;
cin>>num[0];
for(int i=1;i<n;i++) {
cin>>num[i];
now=abs(num[i]-num[i-1]);
if(now>most) most=now;
}
cout<<most;
return 0;
}
第二题
201609-2
试题名称: 火车购票
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int num[100]={};
int flag[20][5]={};
vector<int> out[100];
//to give number to every seat
for(int i=0;i<20;i++){
for(int j=0;j<5;j++){
flag[i][j]=i*5+j+1;
}
}
int rest_c[20]={};
for(int i=0;i<20;i++) rest_c[i]=5;
for(int i=0;i<n;i++) {
cin>>num[i];
if(i==0){
for(int j=0;j<num[i];j++) {
out[i].push_back(flag[0][j]);
flag[0][j]=0;
rest_c[0]--;
}
}
else{
int l=0;
int t=0;
while(l<20&&rest_c[l]<num[i]){l++;}
if(l<20){
int j=0;
while(j<5&&t!=num[i]){
if(flag[l][j]!=0){
out[i].push_back(flag[l][j]);
flag[l][j]=0;
rest_c[l]--;
t++;
}
j++;
}
}
else{
t=0;
for(int r=0;r<20;r++){
if(t==num[i]) break;
for(int s=0;s<5;s++){
if(t==num[i]) break;
if(flag[r][s]!=0){
out[i].push_back(flag[r][s]);
flag[r][s]=0;
rest_c[r]--;
t++;
}
}
}
}
}
}
for(int i=0;i<n;i++){
if(out[i].size()!=0){
for(int j=0;j<(int)out[i].size();j++) cout<<out[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
这个题处理不好没办法连续放一起的,会AC出90,记得改改就好啦。rest_c是记录每一排的连续座位情况