UVA11039
題意:
? ? ?給你一個(gè)序列,由n個(gè)數(shù)字組成,每個(gè)數(shù)字的絕對(duì)值都不相同,然后讓你從這n個(gè)數(shù)中拿出一些數(shù),組成一個(gè)絕對(duì)值遞增并且正負(fù)交替的最大序列,問(wèn)組成的最大序列的最大長(zhǎng)度是多少?
思路:
? ? ? 比較簡(jiǎn)單,突破口是所有數(shù)字的絕對(duì)值都不同,那么我們直接模擬就行了,直接按絕對(duì)值sort一遍,然后第一個(gè)默認(rèn)是找出序列的第一個(gè),然后直接看看有多少正負(fù)交替的就行了,具體看代碼。
#include<stdio.h>
#include<algorithm>
#define N 500000 + 10
using namespace std;
int num[N];
int abss(int x)
{
? ?return x > 0 ? x : -x;
}
bool camp(int a ,int b)
{
? ?return abss(a) < abss(b);
}
int main ()
{
? ?int n ,i ,Ans ,nowzf ,t;
? ?scanf("%d" ,&t);
? ?while(t--)
? ?{ ?
? ? ? scanf("%d" ,&n);
? ? ? for(i = 1 ;i <= n ;i ++)
? ? ? scanf("%d" ,&num[i]);
? ? ? sort(num + 1 ,num + n + 1 ,camp);
? ? ? num[1] < 0 ? nowzf = 1 : nowzf = -1;
? ? ? for(Ans = 0 ,i = 1 ;i <= n ;i ++)
? ? ? {
? ? ? ? ?if(num[i] >= 0 && nowzf < 0 || num[i] < 0 && nowzf > 0)
? ? ? ? ?{
? ? ? ? ? ? Ans ++;
? ? ? ? ? ? nowzf *= -1;
? ? ? ? ?}
? ? ? }
? ? ? printf("%d\n" ,Ans);
? ?}
? ?return 0;
}
? ? ??
? ? ??
? ? ?給你一個(gè)序列,由n個(gè)數(shù)字組成,每個(gè)數(shù)字的絕對(duì)值都不相同,然后讓你從這n個(gè)數(shù)中拿出一些數(shù),組成一個(gè)絕對(duì)值遞增并且正負(fù)交替的最大序列,問(wèn)組成的最大序列的最大長(zhǎng)度是多少?
思路:
? ? ? 比較簡(jiǎn)單,突破口是所有數(shù)字的絕對(duì)值都不同,那么我們直接模擬就行了,直接按絕對(duì)值sort一遍,然后第一個(gè)默認(rèn)是找出序列的第一個(gè),然后直接看看有多少正負(fù)交替的就行了,具體看代碼。
#include<stdio.h>
#include<algorithm>
#define N 500000 + 10
using namespace std;
int num[N];
int abss(int x)
{
? ?return x > 0 ? x : -x;
}
bool camp(int a ,int b)
{
? ?return abss(a) < abss(b);
}
int main ()
{
? ?int n ,i ,Ans ,nowzf ,t;
? ?scanf("%d" ,&t);
? ?while(t--)
? ?{ ?
? ? ? scanf("%d" ,&n);
? ? ? for(i = 1 ;i <= n ;i ++)
? ? ? scanf("%d" ,&num[i]);
? ? ? sort(num + 1 ,num + n + 1 ,camp);
? ? ? num[1] < 0 ? nowzf = 1 : nowzf = -1;
? ? ? for(Ans = 0 ,i = 1 ;i <= n ;i ++)
? ? ? {
? ? ? ? ?if(num[i] >= 0 && nowzf < 0 || num[i] < 0 && nowzf > 0)
? ? ? ? ?{
? ? ? ? ? ? Ans ++;
? ? ? ? ? ? nowzf *= -1;
? ? ? ? ?}
? ? ? }
? ? ? printf("%d\n" ,Ans);
? ?}
? ?return 0;
}
? ? ??
? ? ??
總結(jié)
- 上一篇: UVA10970大块巧克力
- 下一篇: LA3403 天平难题