分析:简单的排序后简单分析即可。
#include<iostream>
#include<algorithm>
#include<string.h>
#include<cmath>
#include<vector>
using namespace std;
typedef long long ll;
int t;
bool cmp(int a,int b)
{
return abs(a)<abs(b);
}
void solve()
{
int n=0;
cin>>n;
int b[n+2];
memset(b,0,sizeof(b));
for(int i=1;i<=n;i++) cin>>b[i];
//max情况
sort(b+1,b+n+1);
int sec=1,cnt=n,ans=0;
while(sec<=n){
if(b[cnt]>0) ans++;
else ans--;
cout<<ans<<" ";
sec++;cnt--;
}
cout<<endl;
//min情况
sort(b+1,b+1+n,cmp);
ans=0;
for(int i=1;i<=n-1;i++){
if(b[i]+b[i+1]==0){
cout<<1<<" "<<0<<" ";
i++;
}
else{
ans++;
}
}
if(b[n]+b[n-1]!=0) ans++;
for(int i=1;i<=ans;i++){
cout<<i<<" ";
}
cout<<endl;
}
int main()
{
cin>>t;
while(t--) solve();
return 0;
}
当然,这肯定不是一个好的写法,甚至写得有点蠢。
分析:一个很有意思的趣味思考题。主要是要弄清楚题目的意思。我们需要Dasha的计划来行事,每一次doctor来检查的时候我们需要贪心,考虑最坏的情况,毕竟是还没有做,需要做好完全的准备嘛。总得来说,边模拟边贪心。贪心的话,分析一下就可以找到规律了,当天已经有了M只guinea pigs,最坏的情况就是占据M/2的笼子。注意,每次医生来检查后可能会出现空闲的笼子,注意处理一下就行。
#include<iostream>
#include<algorithm>
#include<string.h>
#include<cmath>
#include<vector>
using namespace std;
typedef long long ll;
int t;
void solve()
{
int n,ans=0,fre=0,cnt=0,flag=0;
cin>>n;
int pos=n;
int b[n+2];
memset(b,0,sizeof(b));
for(int i=1;i<=n;i++) {
cin>>b[i];
if(b[i]==1){
cnt++;
if(fre>0) fre--;
else ans++;
}
else {
int house=cnt/2+1;
fre=ans-house;
}
}
cout<<ans<<endl;
return;
}
int main()
{
cin>>t;
while(t--) solve();
return 0;
}
此篇仅仅是为了纪念我第一写Codeforces。(加了不少分,贼开心)
![](https://img-blog.csdnimg.cn/img_convert/4f70750f215b1b6170a873d7341a49be.png)