2011年7月31日 星期日

d189: 11150 - Cola

內容 :
    你在便利商店看到一個這樣的宣傳單: "3瓶空可樂罐換一瓶可樂"
    現在你決定在便利商店買一些可樂(就說N瓶好了), 你想知道你最多可以喝到多少瓶

    下面的圖形說明的當 N=8 時候的情況. 方法一是標準的做法: 在你喝了 8 瓶可樂之後, 你有 8 個空罐子, 把其中 6 瓶空罐子換成 2 瓶新的, 喝完之後你就有 4 瓶空罐子, 然後你又可以拿 3 瓶換 1 瓶新的, 最後, 你只有 2 個空罐子, 所以你再也不能再換新的可樂了. 所以你總共可以喝到 8 + 2 + 1 = 11 瓶可樂.

    可是其實你有一個更好的方法! 在第二種方法裡面, 你可以先和你的朋友(或者是店員??)借一個空罐子, 然後你就可以喝到 8 + 3 + 1 = 12 瓶可樂! 當然, 你最後要把 1 瓶空罐子還給你的朋友.
    請記得: 喝太多可樂對身體不好喔!

輸入說明 :
    輸入有好幾組資料,每一組一行, 每一行有一個正整數 N (1 <= N <= 200)。

輸出說明 :
    對於每組輸入,輸出你最多可以喝到幾瓶可樂。你可以和你的朋友借一些空罐子,但是請記得還給他一樣數量的空罐子。

範例輸入 :
8
9

範例輸出 :
12
13

出處 :
    UVa ACM 11150 (管理:snail)

程式碼 :
#include<stdio.h>

int main()
{
    int n;
    long long drink,empty,temp;
    
    while(scanf("%d",&n)==1)
    {
        drink = empty = n;
        while(empty > 2)
        {
            temp = empty / 3;
            drink = drink + temp;
            empty = empty % 3 + temp;
        }
        if(empty == 2)
            drink++;
        printf("%lld\n",drink);
    }
    return 0;
}



http://zerojudge.tw/ShowProblem?problemid=d189

d182: Q256: Quirksome Squares

內容 :
    3025這個4位數相當特別。如果你把他從中間切開你會得到2個長度相同的數30,25。而且此2數和的平方恰等於原來的數,我們稱這種數為quirksome number。

    (30+25)2=3025

    這個問題是:給你N位數(N=2,4,6,8),要找出符合以上性質的所有數。
    For example:4位數就是從0000到9999。注意:數字前方的0也要算在內。也就是說0001等於 (00+01)2 ,是一個4位數的quirksome number。

輸入說明 :
    輸入可能包含了好幾列測試資料,每一列只有一個數字N(N=2,4,6,8),代表要求的是幾位數的quirksome number。

輸出說明 :
    對每一個輸入N,你應該要輸出所有N位數的quirksome number,每個一行,由小到大排列。注意:數字前方的0不可忽略,例如2位數中的quirksome number 01不可只輸出1。

範例輸入 :
2
2

範例輸出 :
00
01
81
00
01
81

出處 :
    ACM 256 (管理:liouzhou_101)

程式碼 :
#include<stdio.h>

int main()
{
    int i,j,n,ans[4][10],point[4],ij,temp,loop;
    
    point[0] = 3;
    ans[0][0] = 0;
    ans[0][1] = 1;
    ans[0][2] = 81;
    
    for(i=1; i<4; i++)
        point[i] = 0;
    
    for(n=100,loop=1; loop<4; loop++)
    {
        for(i=0; i<n; i++)
            for(j=0; j<n; j++)
            {
                ij = (i+j) * (i+j) ;
                temp = i*n + j;
                if(ij == temp)
                    ans[loop][point[loop]++] = temp;
                else if(ij > temp)
                    break;
            }
        n = n * 10;
    }
    
    while(scanf("%d",&n)==1)
    {
        switch(n)
        {
            case 2:
                n = n/2 - 1;
                for(i=0; i<point[0]; i++)
                    printf("%02d\n",ans[n][i]);
                break;
            case 4:
                n = n/2 - 1;
                for(i=0; i<point[1]; i++)
                    printf("%04d\n",ans[n][i]);
                break;
            case 6:
                n = n/2 - 1;
                for(i=0; i<point[2]; i++)
                    printf("%06d\n",ans[n][i]);
                break;
            case 8:
                n = n/2 - 1;
                for(i=0; i<point[3]; i++)
                    printf("%08d\n",ans[n][i]);
                break;
        }
    }    
    return 0;
}



http://zerojudge.tw/ShowProblem?problemid=d182

d132: Q340: Master-Mind Hints

內容 :
    Master-Mind是一種2個人的遊戲。其實就是學生常玩的幾A幾B的遊戲(規則或許有些許不同)。其中一個人擔任出題者,他選一串1到9數字當作密碼(可以重複)。另一個人為解題者,他要去猜密碼為何。解題者每次猜測後,出題者以某種格式回答他這次猜的結果。
    在遊戲開始之前,雙方先協議密碼的長度,假設是n。在出題者設定密碼(s1,s2,...sn)後,由解題者來猜(g1,g2,...gn)。如果同樣位置gi=si,那解題者得到一個A。如果gi=sj,但i不等於j,那解題者得到一個B。請注意:不管是得A或得B,每個gi最多只能對應到一個sj,而且得A比得B優先。舉例說明:密碼為1 2 3 4,若猜題者猜1 1 5 6,那出題者應該回答1A0B,而不是0A1B。
    如果某個猜測得到 nA0B,那就代表猜題者完全猜中密碼了。

輸入說明 :
    輸入含有多組測試資料。每組測試資料的第一列含有1個正整數 N(N <= 1000),代表密碼的長度。第二列有N個1到9的數字,代表密碼。接下來有數量不等的猜測,每個一列,亦含有N個1到9的數字。若此猜測的N個數字均為0,代表此組測試資料結束(有此類陷阱)。
    N=0代表整個輸入結束。請參考Sample Input。

輸出說明 :
    對每一組測試資料,輸出這是第幾組。然後輸出出題者回答猜題者各個猜測的結果是幾A幾B,以(A,B)的形式表示。請參考Sample Output。

範例輸入 :
4
1 3 5 5
1 1 2 3
4 3 3 5
6 5 5 1
6 1 3 5
1 3 5 5
0 0 0 0
10
1 2 2 2 4 5 6 6 6 9
1 2 3 4 5 6 7 8 9 1
1 1 2 2 3 3 4 4 5 5
1 2 1 3 1 5 1 6 1 9
1 2 2 5 5 5 6 6 6 7
0 0 0 0 0 0 0 0 0 0
0

範例輸出 :
Zerojudge的輸出
Game 1:
(1,1)
(2,0)
(1,2)
(1,2)
(4,0)
Game 2:
(2,4)
(3,2)
(5,0)
(7,0)

UVa的輸出
Game 1:
(1,1)
(2,0)
(1,2)
(1,2)
(4,0)
Game 2:
(2,4)
(3,2)
(5,0)
(7,0)

出處 :
    ACM 340 (管理:taichunmin)

程式碼 :
#include<stdio.h>

int main()
{
    int A,B,i,n,gameset,check,num[10],box[10],ans[1000],guess[1000],flag[1000];
    
    gameset = 1;
    while(scanf("%d",&n)==1)
    {
        if(n == 0)
            break;
        
        for(i=1; i<10; i++)
            box[i] = 0;
        
        for(i=0; i<n; i++)
        {
            scanf("%d",&ans[i]);    
            box[ans[i]]++;
        }
        printf("Game %d:\n",gameset++);
        while(1)
        {
            check = 0;
            for(i=0; i<n; i++)
            {
                scanf("%d",&guess[i]);
                if(guess[i] == 0)
                    check++;
                flag[i] = 0;
            }
            if(n == check)
                break;
            
            A = B = 0;
            for(i=1; i<10; i++)
                num[i] = box[i];
            
            for(i=0; i<n; i++)
                if(guess[i] == ans[i])
                {
                    A++;
                    flag[i] = 1;
                    num[guess[i]]--;
                }
            
            for(i=0; i<n; i++)
                if(num[guess[i]] > 0 && flag[i]==0)
                {
                    B++;
                    num[guess[i]]--;
                }
            //以下2選1 
            printf("    (%d,%d)\n",A,B);//ACM用
            printf("(%d,%d)\n",A,B);//zerojudge用
        }  
    }    
    return 0;
}




http://zerojudge.tw/ShowProblem?problemid=d132

c091: Hiaku Review

內容 :
    Haiku(俳句)是日本古代的一種詩詞。他是由五音節、七音節、五音節之三句共17音節所組成之短詩。Haiku不需要押韻。以下是一個例子,句子間以斜線分開:

Computer programs/The bugs try to eat my code/I must not let them.

    你的任務是寫一個程式,讀進一首haiku,並檢查其音節。

輸入說明 :
    每組測試資料一列Haiku,一定含有3個句子,每個句子至少含有1個字,字與字間以一空白字元或斜線分隔。斜線也是用來分隔句子的,所以一列中一定含有2個斜線。Haiku只含有小寫的英文字母(a~z),斜線,空白字元。每列的長度不會超過200個字元。

    輸入列為e/o/i代表輸入結束。請參考Sample Input。

    你的認識是判斷每個句子是否有正確的音節(5/7/5)。在本問題中,一個音節指的是連續的母音字母形成的字元序列。母音字母包含a,e,i,o,u,y。每個字至少包含一音節。

    注意:在這裡算音節的方式跟英文念法並不一致。例如在以下第2個sample input中,code這個字在本程式中應該算為2個音節,因為o和e並不連續。然而,若以英文念code這個字其實只有一個音節。

輸出說明 :
    對每一組測試資料,如果此Haiku不正確,請輸出第一個含有不對音節個數的句子是哪一個。(也就是說:若第一個句子的音節個數不對,請輸出1。否則,若 第二個句子的音節個數不對,請輸出2。否則,若第三個句子的音節個數不對,請輸出3。)若三個句子音節的個數全對則請輸出Y。

範例輸入 :
happy purple frog/eating bugs in the marshes/get indigestion
computer programs/the bugs try to eat my code/i will not let them
a e i o u/this is seven syllables/a e i o u y e/o/i

範例輸出 :
Y
2
3

出處 :
ACM 576

程式碼 :
#include<stdio.h>

char s[201];
int i;

int find(char ch)
{
    int check = 0, syllables = 0;
    
    for(;s[i] != ch; i++)
    {
        if(s[i]=='a' || s[i]=='e' || s[i]=='i' || s[i]=='o' || s[i]=='u' || s[i]=='y')
        {
            if(check == 0)
            {
                syllables++;
                check = 1;
            }
        }
        else
            check = 0;
    }
    i++;
    return syllables;
}

int main()
{   
    int temp;
    while(gets(s) != NULL)
    {
        if(s[0]=='e' && s[1]=='/' && s[2]=='o' && s[3]=='/' && s[4]=='i')
            break;
        i = 0;
        if((temp=find('/')) != 5)
            printf("1\n");
        else if(temp=find('/') != 7)
            printf("2\n");
        else if(temp=find('\0') != 5)
            printf("3\n");
        else
            printf("Y\n");
    }    
    return 0;
}



http://zerojudge.tw/ShowProblem?problemid=c091

c085: Pseudo-Random Numbers

內容 :
    電腦無法產生真正的亂數(Random numbers),但是經由某些程序電腦可以產生虛擬亂數(pseudo-random numbers)。亂數被使用在很多應用上,像是模擬等。

    有一種常用的虛擬亂數產生方法:如果上一個亂數是L,那下一個亂數產生的方法是(Z*L+I) mod M,在這裡Z、I、M都是常數。例如:假設Z=7 I=5 M=12。如果第一個亂數(通常叫做 seed)是 4 , 那我們可以產生以下幾個虛擬亂數:



    我們可以發現,經過6個數字後,虛擬亂數的序列重複了,也就是說cycle length=6。
    在這個問題中,你將會被給Z、I、M還有L(就是seed)的值(全部不大於9999),對每一組Z、I、M、L,要請你輸出所產生的虛擬亂數的cycle length。
請注意:cycle並不一定從seed開始。

輸入說明 :
    輸入的每一行有4個整數,依序為Z, I, M, L。(L一定比M小)
    輸入的最後一行為4個0,代表輸入結束。

輸出說明 :
    對每一行輸入,輸出這是第幾組測試資料(連續數字,從1開始)和所產生的虛擬亂數的cycle length。

範例輸入 :
7 5 12 4
5173 3849 3279 1511
9111 5309 6000 1234
1079 2136 9999 1237
0 0 0 0

範例輸出 :
Case 1: 6
Case 2: 546
Case 3: 500
Case 4: 220

出處 :
    ACM 350

程式碼 :
#include<stdio.h>

int main()
{
    int i,j,l,m,n,z,check,point,arr[100000];
    
    n = 1;
    while(scanf("%d%d%d%d",&z,&i,&m,&l)==4)
    {
        if(z==0 && i==0 && m==0 && l==0)
            break;
        
        point = 0;
        check = 1;
        
        while(check)
        {
            arr[point++] = l;
            l = (z*l + i) % m;
            for(j=0; j<point; j++)
                if(arr[j] == l)
                {
                    check = 0;
                    break;
                }
        }        
        printf("Case %d: %d\n",n++,point-j);
    }
    return 0;
}



http://zerojudge.tw/ShowProblem?problemid=c085

2011年7月24日 星期日

c081: Ecological Bin Packing

內容 :
    有3個桶子用來裝回收的玻璃瓶,玻璃瓶的顏色有三種:棕色(Brown)、綠色(Green)、透明色(Clear)。在這個問題裡我們會告訴你每個桶子 裏的玻璃瓶的顏色及數量,現在要搬移桶子裏的玻璃瓶使得最後每個桶子裡都只有單一顏色的玻璃瓶,以方便回收。你的任務就是要算出最小搬移的瓶子數。你可以 假設每個桶子的容量無限大,並且總共搬移的瓶子數不會超過231。

輸入說明 :
    每筆測試資料一行,每行有9個整數.前3個代表第1個桶子裡Brown, Green, Clear顏色的瓶子數。接下來的3個數代表 第2個桶子裡Brown, Green, Clear顏色的瓶子數。最後的3個數代表第3個桶子裡Brown, Green, Clear顏色的瓶子數。

    例如:10 15 20 30 12 8 15 8 31

    表示有20個Clear色的玻璃瓶在第1個桶子裏,12個Green色的玻璃瓶在第2個桶子裏,15個Brown色的玻璃瓶在第3個桶子裏。

輸出說明 :
    對每一筆測試資料,輸出3個桶子內最後存放之玻璃瓶顏色,以及最小搬移的瓶子數。請以大寫的'G'、 'B'、 'C' 分別代表綠色(Green)、棕色(Brown)、透明色(Clear)。

    例如:BCG 30

    代表最後搬移的結果第1個桶子內的玻璃瓶顏色為Brown,第2個桶子內的玻璃瓶顏色為Clear,第3個桶子內的玻璃瓶顏色為Green.並且總共搬移了30個玻璃瓶。
如果最小搬移瓶子數有一組以上的組合,請輸出字典順序最小的那一組答案。

範例輸入 :
1 2 3 4 5 6 7 8 9
5 10 5 20 10 5 10 20 10

範例輸出 :
BCG 30
CBG 50

出處 :
    ACM 102

程式碼1 :
#include<stdio.h>

int main()
{
    int i,j,k,jj,kk,in[9],temp,r[3],max,total;

    while(scanf("%d",&in[0])==1)
    {
        total = in[0];
        for(i=1; i<9; i++)
        {
            scanf("%d",&in[i]);
            total = total + in[i];
        }
        for(i=0; i<7; i=i+3)
        {
            temp = in[i+1];
            in[i+1] = in[i+2];
            in[i+2] = temp;
        }
        r[0] = 0;
        r[1] = 1;
        r[2] = 2;
        max = in[0] + in[4] + in[8];
        
        for(i=0; i<3; i++)
            for(j=0; j<3; j++)
                for(k=0; k<3; k++)
                    if(i!=j && j!=k && i!=k)
                    {
                        jj = 3 + j;
                        kk = 6 + k;
                        if(max < (temp=(in[i]+in[jj]+in[kk])))
                        {
                            max = temp;
                            r[0] = i;
                            r[1] = j;
                            r[2] = k;
                        }
                    }
        for(i=0; i<3; i++)
            switch(r[i])
            {
                case 0:
                    printf("B");
                    break;
                case 1:
                    printf("C");
                    break;
                case 2:
                    printf("G");
                    break;
            }
            
        printf(" %d\n",total - max);
    }        
    return 0;
}

程式碼2 :
#include<stdio.h>

int main()
{
    int i,in[9],temp[6],max,total,choose;
    
    while(scanf("%d",&in[0])==1)
    {
        total = in[0];
        for(i=1; i<9; i++)
        {
            scanf("%d",&in[i]);
            total = total + in[i];
        }
        
        temp[0] = in[0] + in[5] + in[7];
        temp[1] = in[0] + in[4] + in[8];        
        temp[2] = in[2] + in[3] + in[7];
        temp[3] = in[2] + in[4] + in[6];        
        temp[4] = in[1] + in[3] + in[8];
        temp[5] = in[1] + in[5] + in[6];
                
        max = temp[0];
        choose = 0;
        for(i=1; i<6; i++)
            if(temp[i] > max)
            {
                max = temp[i];
                choose = i;
            }
        
        switch(choose)
        {
            case 0:
                printf("BCG %d\n",total-max);
                break;
            case 1:
                printf("BGC %d\n",total-max);
                break;
            case 2:
                printf("CBG %d\n",total-max);
                break;
            case 3:
                printf("CGB %d\n",total-max);
                break;
            case 4:
                printf("GBC %d\n",total-max);
                break;
            case 5:
                printf("GCB %d\n",total-max);
                break;
        }
    }        
    return 0;
}





http://zerojudge.tw/ShowProblem?problemid=c081

2011年7月22日 星期五

c015: Reverse and Add

內容 :
    把一個數字反轉並相加的方法很簡單:就是把數字反轉並加上原來的數字。假如這個和不是一個迴文(指這個數字從左到右和從右到左都相同),就一直重複這個程序。舉例說明:

195 開始的數字
591
-----
786
687
-----
1473
3741
-----
5214
4125
-----
9339 迴文出現了

    在這個例子中,經過了4次相加後得到了迴文9339。幾乎對所有的整數這個方法都會得到迴文,但是也有有趣的例外。196是第1個用這個方法找不到迴文的數字,然而並沒有證明該迴文不存在。
    現在給你一個開始的數字,你的任務就是求出經過多少次相加後,會產生哪一個迴文。對所有的測試資料,你可以假設:1. 都會有1個答案。2. 在1000個相加內都會得到答案。 3. 產生的迴文不會大於4294967295.

輸入說明 :
    第1列有一個整數N(0 < N <= 100),代表以下有幾組測試資料。每筆測試資料一列,各有1個整數 P,就是開始的數字。

輸出說明 :
    對每一測試資料,請輸出2個數字:得到迴文所需的最少次數的相加,以及該迴文。

範例輸入 :
5
195
265
750
2
99

範例輸出 :
4 9339
5 45254
3 6666
1 4
6 79497

出處 :
    ACM 10018

程式碼 :
#include<stdio.h>
#include<string.h>

int main()
{
    int i,k,n,len,lenhalf,addtimes,check;
    char s[1000000];
    
    scanf("%d",&n);
    for(k=0; k<n; k++)
    {
        scanf("%s",s);
        addtimes = 0;
        check = 1;
        
        len = strlen(s);
        for(i=0; i<len; i++)
            s[i] = s[i] - 48;
        
        while(check)
        {
            addtimes++;
                       
            if(len % 2)
                lenhalf = len / 2 + 1;
            else
                lenhalf = len / 2;
            for(i=0; i<lenhalf; i++)
            {
                s[i] = s[i] + s[len-i-1];
                s[len-i-1] = s[i];
            }
                        
            for(i=0; i<len; i++)
            {
                if(s[i] > 9)
                {
                    s[i+1]++;
                    s[i] = s[i] - 10;
                }
            }
            if(s[i] != '\0')
            {
                i++;
                s[i] = '\0';
                len = i;
            }            
            
            check = 0;
            lenhalf = (len=i)/2 + 1;
            for(i=0; i<lenhalf; i++)
            {
                if(s[i] != s[len-i-1])
                {
                    check = 1;
                    break;
                }
            }            
        }
        for(i=0; i<len; i++)
            s[i] = s[i] + 48;
        printf("%d %s\n",addtimes,s);
    }    
    return 0;
}


http://zerojudge.tw/ShowProblem?problemid=c015

c012: Tell me the frequencies!

內容 :
    給你一列文字,請你找出各字元出現的次數。

輸入說明 :
    每筆測試資料一列。每列最大長度為1000。

輸出說明 :
    對每一列輸入,請輸出各字元的ASCII值及其出現的次數。請根據出現的次數由小到大輸出。如果有2個以上的字元有相同的次數,則ASCII值較大的先輸出。 測試資料間請空一列,參考Sample Output

範例輸入 :
AAABBC
122333

範例輸出 :
67 1
66 2
65 3

49 1
50 2
51 3

出處 :
ACM 10062

PS:要注意讀入時要包含空格 && 最後一行下面只能有一行換行不能有2行 在ACM會錯

程式碼 :
#include<stdio.h>

int main()
{
    int n,top,i,j,temp,check;
    char s[1001],ctemp;
    char arr1[1000];
    int arr[1000];
    
    check = 0;
    while(gets(s)!=NULL)
    {
        if(check == 0)
            check = 1;
        else
            printf("\n");
        top = 0;
        for(i=0; s[i]!='\0'; i++)
        {
            for(j=0; j<top; j++)
                if(s[i] == arr1[j])
                {
                    arr[j]++;
                    break;
                }
            if(j == top)
            {
                top++;
                arr1[j] = s[i];
                arr[j] = 1;
            }
        }
        for(i=0; i<top; i++)
            for(j=i+1; j<top; j++)
                if((arr[i] > arr[j]) || (arr[i] == arr[j]) && (arr1[i] < arr1[j]))
                {
                    temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                    
                    ctemp = arr1[i];
                    arr1[i] = arr1[j];
                    arr1[j] = ctemp; 
                }
        for(i=0; i<top; i++)
            printf("%d %d\n",arr1[i],arr[i]);
    }
    return 0;
}


http://zerojudge.tw/ShowProblem?problemid=c012

c009: Simple Base Conversion

內容 :
    在這個問題中你被要求寫一個程式來做數字基底的轉換。給你一個10進位或16進位的數,請你把他轉換成16進位或10進位的數。16進位的數總是以0x當開頭,其他所有的數都被當成是10進位。輸入中不會有不合法的數。

輸入說明 :
    輸入含有多組測試資料。每組測試資料一列有一個不為負數的數,可能是一個10進位或16進位的數。請根據上述的敘訴判斷。這個數10進位的值一定小於 231 。 若輸入為負的10進位數字時代表輸入結束。請參考 Sample Input。

輸出說明 :
    對每組測試資料輸出一列。如果輸入的是10進位的數,請輸出其16進位的值。如果輸入是16進位的數,請輸出其10進位的值。 如同輸入一樣,輸出的16進位的數也請以 0x 開頭。請參考Sample Output。

範例輸入 :
4
7
44
0x80685
-1

範例輸出 :
0x4
0x7
0x2C
525957

出處 :
    ACM 10473

程式碼 :
#include<stdio.h>

int main()
{
    int n;
    char s[100];
    while(scanf("%s",s)==1)
    {
        if(s[0]=='-')
            break;
        if(s[1]=='x')
        {
            sscanf(s,"%x",&n);
            printf("%d\n",n);
        }
        else
        {
            sscanf(s,"%d",&n);
            printf("0x%X\n",n);
        }
    }
    return 0;
}



http://zerojudge.tw/ShowProblem?problemid=c009

c005: 環保獎金

內容 :
    德國的農夫根據他們農場的條件被發給獎金。想像以下簡單的規則:你知道農場的大小也知道有多少動物住在裡面。在這裡我們並不去分別不同的動物有什麼 不同之處(雖然這跟現實有些不合)。除此之外,你還知道農夫使用環保設備及習慣的等級(稱之環保等級),這等級以大於0的整數來表示。
    農夫得到的獎金是根據以下的計算:首先算出每隻動物平均居住的空間,然後乘以該農夫的環保等級,這樣你就得到每隻動物可以領多少獎金。最後再把這個值乘以所有動物的數目,就可以算出該農夫可得到獎金的數目了。

輸入說明 :
    輸入的第一列有一個整數n(n<20),代表以下有幾組測試資料。每組測試資料的第一列有1個整數 f(0 < f < 20)代表在這組測試資料中有多少個農夫。接下來有 f 列,每列有3個正整數,分別代表各農夫農場的面積,農場裡動物的數目,該農夫的環保等級。所有輸入的整數都不會比100000大,也不會比0小。

輸出說明 :
    對每組測試資料,請輸出1個整數,代表要發給農夫的獎金的總數。

範例輸入 :
3
5
1 1 1
2 2 2
3 3 3
2 3 4
8 9 2
3
9 1 8
6 12 1
8 1 1
3
10 30 40
9 8 5
100 1000 70

範例輸出 :
38
86
7445

出處 :
    ACM 10300

程式碼 :
#include<stdio.h>

int main()
{
    int n,f,i,j;
    long long a,b,c,total;
    
    scanf("%d",&n);
    
    for(i=0; i<n; i++)
    {
        total = 0;
        scanf("%d",&f);
        for(j=0; j<f; j++)
        {
            scanf("%lld%lld%lld",&a,&b,&c);
            total = total + a * c;            
        }
        printf("%lld\n",total);
    }
    return 0;
}

http://zerojudge.tw/ShowProblem?problemid=c005