版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/decision2016/article/details/55094900
一开始没看到是选数,,,就以为是dp,但是后来看到是选出来排列,那么直接按照绝对值排序之后就加判断就好了。。。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cstdlib>
#include<vector>
#include<queue>
#include<stack>
#include<algorithm>
using namespace std;
#define maxx 500000+10
int n,m,all[maxx];
bool y;
bool cmp(int a,int b)
{
return abs(a)<abs(b);
}
void solve()
{
int flag = 0;
int ans = 0;
for(int i = 1;i<=m;i++)
{
if(flag == 0)
{
if(all[i]>0){
flag = 1;
ans++;
}
if(all[i]<0){
flag = 2;
ans++;
}
}
if(all[i]>0&&flag==2) {ans++; flag = 1;}
if(all[i]<0&&flag==1) {ans++; flag = 2;}
}
cout<<ans<<endl;
}
int main()
{
//freopen("std.in","r",stdin);
cin>>n;
while(n--)
{
memset(f,1,sizeof(f));
cin>>m;
for(int i = 1;i<=m;i++) cin>>all[i];
sort(all+1,all+m+1,cmp);
solve();
}
return 0;
}