#38847: C++ ,這樣寫居然不會TLE


lla0920261161@gmail.com (abyssbreeze)

學校 : 不指定學校
編號 : 200128
來源 : [39.15.8.24]
最後登入時間 :
2024-02-05 16:07:12
f408. 迷你蘋菓鎮 -- 板橋高中教學題 | From: [111.254.165.247] | 發表日期 : 2023-12-27 23:34

不太知道怎麼寫比較好,所以用了一堆陣列和迴圈去比對

順便請教大佬教我優化

思路: 我先用兩個陣列存放有加絕對值(簡稱np)跟沒加絕對值(簡稱ap)的值,將np排序後,跟ap比較,確認數值一樣後再判斷正負,並再用一個陣列紀錄np每個值為正或負,最後在比較是否白人黑人交錯
 
 
 
 
 
 
 
 
 
```
#include <bits/stdc++.h>
using namespace std;

int main() {
    cin.sync_with_stdio(0) ;
    cin.tie(0) ;

    int n ;
    cin>>n ;
    int all_people[n];
    int num_people[n];
    bool ans_people[n] = {false} ;
    int t = 0 ;
    for (int i = 0; i < n; i++)
    {
        int p;
        cin>>p;
        all_people[i] = p ;
        num_people[i] = abs(p) ;
    }
    sort(num_people,num_people+n);
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j <n ; j++)
        {
            if(num_people[i] ==abs(all_people[j]) ){
                if(all_people[j]<0){
                    ans_people[i] = false;
                }
                else if (all_people[j]>0)
                {
                    ans_people[i] = true ;
                }
               
            }
        }    
    }
    for (int i = 1; i < n ; i++)
    {
        if((ans_people[i] == false && ans_people[i-1] == true) || (ans_people[i] == true && ans_people[i-1] == false) ){
            t++;
        }
    }
    cout<<t ;

    return 0;
}
```
 
#39496: Re: C++ ,這樣寫居然不會TLE


asdfasdfasdfasdf (unknown)

學校 : 天主教私立文興高級中學
編號 : 263327
來源 : [1.173.227.230]
最後登入時間 :
2024-03-07 17:38:32
f408. 迷你蘋菓鎮 -- 板橋高中教學題 | From: [1.173.232.235] | 發表日期 : 2024-02-28 18:30

可以重寫 cmp 再排序 大概是這樣 :

bool cmp(int a, int b) {

         return abs(a) < abs(b);

}

.

.

.

sort(ap, ap+n, cmp);



 
ZeroJudge Forum