HDOJ 1004 Let the Balloon Rise

開源中國寫的第一篇日誌 加油

水呀水 ,不過水壓不小,暈死,一晚上就死在了這裡,
回想一下這題真的真的不難
一開始是思路問題,到後來編程了代碼實現的問題
一開始是想的列出兩個數組,一個color[10001][16]存放balloon的種類,第二個數組map[10001]存放是否在計數時計算過,最後對map[10001]計數,感覺下來又回到了color ,暈死
為什麼會這樣想呢,可能是因為受到之前寫搜索題目地圖標記的影響,反倒是讓著他們更不好寫了
以後的話面對平面的搜索題目用一個二維數組map標記有沒有遍曆,這種以為統計的題目,就用簡單的整型保存就好
用了一晚上體會到了這種題目應該用什麼數據類型來存放,
今天這個僅僅是一個數組就完成了任務
有回想一下usaco裏面的1.1.2—————Greedy Gift Givers——————貌似差不多的存儲類型 但這個是用的結構體實現的
對於這麼區別呢
大概可以這樣吧:
就是在有比較多的對象時候開始考慮使用數組,然後是分析不同對象的狀態,是只用兩種0或者1-—用數組沒錯
但是當發現不同的對象還會有不同的數據對應下來(不同的數據還要做運算,不能夠用單一的數組類型存儲時) ——就要開始考慮結構體了

#include <stdio.h>
#include <string.h> 
//#include <stdlib.h>

int main ()
{
    int N, i, j, k;
    while (scanf("%d", &N) && N)
    {
        char color[N][16]; //這種開法可能會好一點,比函數開頭來意個color[10001][16]
        int   max=0, t=0, flag=0;
        
        for(i=0; i<N; i++)
          scanf("%s", color[i]); //{ getchar(); gets(color[i]) }
            
        for(i=0; i<N; i++)
        {
            t=0; //這個t=0可是苦我了,放在了第二層for裏面了,不報錯樣例也可以通過,還是自己對自己要寫的程序沒有一個清晰的把握造成的
            if(color[i][0]=='\0')continue ;   //哦,不錯哦,這個不是自己想到的,整個算法的思路就是在這裡了
            for(j=i+1; j<N; j++)
            {
                if(color[j][0]=='\0')continue ; 
                if(strcmp(color[i], color[j]) == 0)
                {
                    t++;//printf("%d", t);
                     color[j][0]='\0'; \\把已經存在但是統計過輸的ballo0n去掉,到最後這個長長的color裏面也只有第一次出現某種顏色的color[i][0]了
                }   
            }  
            if(max < t)
            {
                 max=t;
                 flag=i;
            }    
        }
        puts(color[flag]);   
    }
//system ("pause");      
    return 0;
}


你可能感兴趣的:(HDOJ 1004 Let the Balloon Rise)