Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

贴我的思路和代码,WA但是找不到错。。

Posted by bnusaga at 2006-06-26 23:48:06 on Problem 1013
初始所有字母权为0。
首先,把even的项中所有字母的权赋为10,表示排除它们。
然后,对up的项中的字母,若权不是10,且字母在左边的话,权减1;字母在右边的话,权加1。
对down的项同样的方法,相反处理。
如果权是负的,但是又被加1,则把该字母权赋为10。如果权是正的,但是被又减1,则把该字母权赋为10。排除他们。

最后,比较没有被排除的数的权,从中找出绝对值最大的,就是要找的字母。假如它的权大于0,就是它轻,假如它的权小于0,就是它重。

这个方法对discuss里面的数据和题目给的数据都测试过了,到底错在哪里??

#include <iostream>
#include <math.h> 
using namespace std;

int main() {
    int number; 
    cin >> number;
    for(int w = 0; w < number; w++) {
            int coin[12] = {0};
            char left[3][13] = {0};
            char right[3][13] = {0};
            char state[3][4];
            int j; 
            
            cin >> left[0] >> right[0] >> state[0]; 
            cin >> left[1] >> right[1] >> state[1];
            cin >> left[2] >> right[2] >> state[2];
            
            for(j = 0; j < 3; j++) 
                if(state[j][0] == 'e') {
                         for(int i = 0; i < 13 && left[j][i] != 0; i++) {
                                 coin[int(left[j][i]-'A')] = 10;
                                 coin[int(right[j][i]-'A')] = 10;       
                         }                      
                }
                
            for(j = 0; j < 3; j++)
                if(state[j][0] == 'u')
                    for(int i = 0; i < 13 && left[j][i] != 0; i++) {
                        if(coin[int(left[j][i]-'A')] != 10)
                            if(coin[int(left[j][i]-'A')] > 0) 
                                coin[int(left[j][i]-'A')] = 10;
                            else
                                coin[int(left[j][i]-'A')]--;
                        if(coin[int(right[j][i]-'A')] != 10)
                            if(coin[int(right[j][i]-'A')] < 0)
                                coin[int(right[j][i]-'A')] = 10;
                            else
                                coin[int(right[j][i]-'A')]++; 
                    }
                else if(state[j][0] == 'd')
                    for(int i = 0; i < 13 && left[j][i] != 0; i++) {
                        if(coin[int(right[j][i]-'A')] != 10)
                            if(coin[int(right[j][i]-'A')] > 0) 
                                coin[int(right[j][i]-'A')] = 10;
                            else
                                coin[int(right[j][i]-'A')]--;
                        if(coin[int(left[j][i]-'A')] != 10)
                            if(coin[int(left[j][i]-'A')] < 0)
                                coin[int(left[j][i]-'A')] = 10;
                            else
                                coin[int(left[j][i]-'A')]++; 
                    }
            int temp = 0;
            int id = 0;               
            for(int i = 0; i < 12; i++)
                if(coin[i] != 10 && coin[i] != 0 && abs(coin[i]) > temp) {
                    id = i;
                    temp = abs(coin[i]); 
                }
            if(coin[id] > 0)
                printf("%c is the counterfeit coin and it is light.\n", id+'A'); 
            else
                printf("%c is the counterfeit coin and it is heavy.\n", id+'A');
    }
    for(;;); 
    return 0;  
} 

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator