题解 | #隔离#
隔离
https://ac.nowcoder.com/acm/contest/40640/A
本题测试数据有问题 代码来自提交记录 下面的代码不能ac。
#include<bits/stdc++.h>
using namespace std;
#pragma GCC optimize ("O0")
//咋就这么坑呢,ai改ai就80了?
int n,a[1005],ans,ubs,bs,wf,gl;
int ai;
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>ai;
bs+=ai;
if(ai>=240)gl=1; //一定被隔离
if(ai+ubs>=240){ //办这件事就会隔离,那么假定不办
wf+=400; //往返
ubs=ai; //办事用掉的时间重置
}else{
ubs+=ai; //不往返累计办事用掉的时间
}
}
//如果必然隔离:办事+隔离
//否则为min(办事+隔离,办事+往返)
if(gl){
cout<<bs+10080+400;
}else{
cout<<min(bs+10080+400,bs+wf+400);
}
return 0;
}
改成这样就可以ac
#include<bits/stdc++.h>
using namespace std;
//咋就这么坑呢,a[i]改ai就80了?
int n,a[1005],ans,ubs,bs,wf,gl;
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
bs+=a[i];
if(a[i]>=240)gl=1; //一定被隔离
if(a[i]+ubs>=240){ //办这件事就会隔离,那么假定不办
wf+=400; //往返
ubs=a[i]; //办事用掉的时间重置
}else{
ubs+=a[i]; //不往返累计办事用掉的时间
}
}
//如果必然隔离:办事+隔离
//否则为min(办事+隔离,办事+往返)
if(gl){
cout<<bs+10080+400;
}else{
cout<<min(bs+10080+400,bs+wf+400);
}
return 0;
}