UVa 11039 Building designing

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;                                                                                  
}                                                                                     

猜你喜欢

转载自blog.csdn.net/decision2016/article/details/55094900