| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:出人命了!测试数据都对了可wrong了N次:大侠几个让我wrong的数据或建议吧,不胜感激:In Reply To:出人命了!测试数据都对了可wrong了N次:大侠几个让我wrong的数据或建议吧,不胜感激: Posted by:lzj_kkx at 2009-05-04 16:32:15 > //优化
> #include <stdio.h>
> #include <string.h>
> #define OK 1
> #define ERROR 0
> #define HALF_STRING 4
> #define LEFT -1
> #define RIGHT 1
> #define FALSE 0
>
> typedef int status;
> typedef struct
> {
> char left[13];
> char right[13];
> } line;
>
> status initLineArray(line string[3],int *countEven);
> status solution(line string[3],int countEven);
>
> int locate(line *string,char counterfeit);
> void printfResult(char weight[],int state,char counterfeit);
> main()
> {
> int n,countEven;
> line string[3];
> fp = fopen("data.txt","r");
> scanf("%d",&n);
> while(n--)
> {
> countEven = 0;
> initLineArray(string,&countEven);
> solution(string,countEven);
> }
> }
> status initLineArray(line string[3],int *countEven)
> {
>
> char left[5],right[5],weigh[5];
> int first = 0 ,last = 2,i;
> for( i = 0;i < 3 ;i++)
> {
> scanf("%s %s %s",left,right,weigh);
> if(!strcmp(weigh,"even"))
> {
> (*countEven)++;
> strcpy(string[last].left,left);
> strcpy(string[last].right,right);
> last--;
> }
> else if(!strcmp(weigh,"down"))
> {
> strcpy(string[first].left,right);
> strcpy(string[first].right,left);
> first++;
> }
> else
> {
> strcpy(string[first].left,left);
> strcpy(string[first].right ,right);
> first++;
> }
> }
> return OK;
> }
> status solution(line string[3],int countEven)
> {
> int i,j,state[3];
> char counterfeit;
> char weight [6];
>
> for(i = 'A';i <= 'L';i++)
> {
> counterfeit = i;
>
> for(j = 0;j < 3;j++)
> state[j] = locate(&string[j],counterfeit);
> switch (countEven)
> {
> case 0:
> if(state[0] == state[1] && state[2] == state[1] && state[0])
> i = 'L';
> break;
> case 1:
> if(state[0] == state[1] && state[0] && !state[2])
> i = 'L';
> break;
> case 2:
> if(state[0] && !state[1] && !state[2])
> i = 'L';
> break;
> default:
> break;
> }
>
> }
> printfResult(weight,state[0],counterfeit);
> return OK;
> }
> int locate(line *string,char counterfeit)
> {
> int i;
>
> for(i = 0;i < sizeof(string->left);i++)
> {
> if(*(string->left + i) == counterfeit)
> return LEFT;
> }
>
> for(i = 0;i < sizeof(string->right);i++)
> {
> if(*(string->right + i) == counterfeit)
> return RIGHT;
> }
>
> return FALSE;
> }
> void printfResult(char weight[],int state,char counterfeit)
> {
> if(state == -1)
> {
> strcpy(weight,"heavy");
> }
> else if(state == 1)
> {
> strcpy(weight,"light");
> }
> printf("%c is the counterfeit coin and it is %s.\n",counterfeit,weight);
> }
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator