水题:根据绝对值大小排序,遍历即可
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
struct num{
int val,symbol;
friend bool operator <(num a,num b){
return a.val<b.val;
}
};
int main(){
int ncase;
cin >> ncase;
vector<num> g;
while(ncase--){
g.clear();
int n;
scanf("%d",&n);
for(int i = 0; i < n; i++){
int tmp;
num t;
scanf("%d",&tmp);
if(tmp > 0){
t.val = tmp;
t.symbol = 1;
}else{
t.val = -tmp;
t.symbol = 0;
}
g.push_back(t);
}
sort(g.begin(),g.end());
int ans = 1;
bool flag = g[0].symbol;
for(int i = 1; i < g.size(); i++){
while(flag == g[i].symbol && i < g.size()){
i++;
}
if(flag != g[i].symbol && i < g.size()){
ans++;
flag = g[i].symbol;
}
}
cout<<ans<<endl;
}
return 0;
}
本文介绍了一种根据数值的绝对值大小进行排序并计算特定条件下的不同符号序列数量的算法实现。通过定义一个结构体来存储数值及其符号,并利用C++标准库中的sort函数按绝对值排序,最后遍历排序后的序列来计算结果。
1611

被折叠的 条评论
为什么被折叠?



