2012年1月13日 星期五

acm 10963

#include <stdio.h>
#include <math.h>
int main()
{
  int i,data,a,y1,y2,temp,first=0;
 
  while(scanf("%d",&data)==1)
  {   
      
     int flag =1; 
     data--; 
     if(first)
        printf( "\n" );
     first++;
     scanf("%d",&a);    
     scanf("%d %d",&y1,&y2);
     temp= abs(y1-y2);
    
     for(i=0;i<a;i++)
     {
       scanf("%d %d",&y1,&y2);             
       if(abs(y1-y2)!=temp)
          flag=0;            
     }
    
     if(flag)
       printf("Yes\n");
     else                   
       printf("No\n");                   
  } 
     
 system("pause");
 return 0;   
}

acm 10929 You can say 11

 [心得]
    if((abs(odd-even))%11==0)  ,(abs(odd-even)) 記得要括弧,不然會一直錯!


#include <stdio.h>
#include <string.h>
#include <math.h>

char s[1002];

int main()
{
  while(gets(s))
  {
    int i,length,num;
    int odd=0,even=0;
    if(s[0]=='0'&& s[1]=='\0')
      break;
   
    length =strlen(s);               
    for(i=0;i<length;i++)
    {              
      if((i%2)== 1) /*奇數位元*/
        odd += s[i]-48;
      else        /*偶數位元*/
        even+= s[i]-48;                         
    }
  
    if((abs(odd-even))%11==0)
      printf("%s is a multiple of 11.\n",s);
    else 
      printf("%s is not a multiple of 11.\n",s);        
                   
  } 
 
 system("pause");
 return 0;   
}

acm 10924 Prime Words

[心得] //0.004

#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
  char s[30];
  int ans[53];
  int i,length,sum,flag;
   
  while(gets(s)!=NULL)
  {
     memset(ans,0,sizeof(ans));               
     length =strlen(s);
     sum=0;
     flag=0;                  
     for(i=0;i<length;i++)
     {
       if(isupper(s[i]))
          ans[(s[i]-38)]+=1;  /* 大寫A ASCII從65map到陣列ans27的位置 */
       else  
          ans[(s[i]-96)]+=1;  /* 小寫a ASCII從97map到陣列ans1的位置 */             
     } 
     for(i=1;i<53;i++)
     {            
       if(ans[i])
          sum=sum+ans[i]*i;                  
     }
     for(i=2;i<sum;i++)
     {
       if(sum %i ==0)
          flag=1;                    
     }
     if(flag)
       printf("It is not a prime word.\n");
     else 
       printf("It is a prime word.\n");
                      
  }   
  system("pause");
  return 0;   
}

acm 10903 Rock-Paper-Scissors Tournament

[心得] //0.256

1.memset也可以初始化 布林陣列 ,memset define 在 "string.h"裡
2. res[]陣列是用來記錄選手i贏的次數
3.flag[]陣列是,表示這次比賽如果不是平手,=>用來記錄選手i 這次比賽有意義
4, time[] 陣列是用來紀錄選手i到底比賽幾次(但是平手不紀錄)

#include <stdio.h>
#include <string.h>
#include <stdbool.h>
 
int i,j=0,number,time[150],game,p1,p2,res[150];
char m1[10],m2[10];

int main()
{

  while(scanf("%d %d",&number,&game)==2)
  {
                 
     if(number==0)
        break;
     if(j>0)
        printf("\n");
     j++;
    
     bool flag[number+1];
     game= game*number*(number-1)/2;
     memset(res,0,sizeof(res));
     memset(time,0,sizeof(time));
     memset(flag,false,sizeof(flag));
    
     for(i=0;i<game;i++)
     {
    
      scanf("%d %s %d %s",&p1,m1,&p2,m2);
        
       if(m1[0]=='r' && m2[0]=='p') 
           {res[p2]+=1; flag[p1]=flag[p2]=true; time[p1]+=1;time[p2]+=1;}
       else if (m1[0]=='r' && m2[0]=='s')  
           {res[p1]+=1; flag[p1]=flag[p2]=true; time[p1]+=1;time[p2]+=1;} 
       else if (m1[0]=='p' && m2[0]=='r')   
           {res[p1]+=1; flag[p1]=flag[p2]=true; time[p1]+=1;time[p2]+=1;}
       else if (m1[0]=='p' && m2[0]=='s')    
           {res[p2]+=1; flag[p1]=flag[p2]=true; time[p1]+=1;time[p2]+=1;;}
       else if (m1[0]=='s' && m2[0]=='p')    
           {res[p1]++;  flag[p1]=flag[p2]=true; time[p1]+=1;time[p2]+=1;}
       else if (m1[0]=='s' && m2[0]=='r')
           {res[p2]+=1; flag[p1]=flag[p2]=true; time[p1]+=1;time[p2]+=1;}
    
     }
     for(i=1;i<=number;i++)
     {
        if( flag[i] == false)
           printf("-\n");
        else
        {                    
           printf("%.3f\n",(double)res[i]/time[i]);
        }
     } 
  } 

  system("pause");
  return 0;   
}

2012年1月11日 星期三

acm 10878: Decode the tape

[心得] 0.008

1. ,每行都是一個ASCII 碼,每行只要注意 'o'出現的位置,轉換成相對應的ASCII碼

#include <stdio.h>
#include <string.h>
#include <math.h>

int main()
{

   int length,i,sum,counter=0;
   char s[20];
   char output[100000];
  
       gets(s);
       
       while(gets(s)!=NULL)
       {  
          if(strcmp(s,"___________")==0)
            break;
         sum=0;
       /*  for(i=0;i<=11;i++)
         printf("s[%d]=%c\n",i,s[i]);*/
      
          for(i=0;i<=11;i++)
          {  
              if(s[i]=='o')
              {
                  if((9-i)==0)
                    sum =sum+1;
                  else if((9-i)==1)
                    sum =sum+2;
                  else if((9-i)==2) 
                    sum =sum+4;
                  else 
                    sum = sum+pow(2,(8-i));
                     
              } 
          
          }
             /*printf("%c\n",sum); */
             output[counter]=sum;
             counter++;
                         
       } 
      
        for(i=0;i<counter;i++)
           printf("%c",output[i]); 
        /*counter=0; 
        printf("\n");*/

   system("pause");
   return(0);   
}

acm 10812: Beat the Spread!

[[心得]  0.004

#include <stdio.h>

int main()
{
  int a,b,data;

  while(scanf("%d",&data)==1)
  {
       int k;                          
       for(k=0;k<data;k++)
       {
           int x,y;      
           scanf("%d %d",&a,&b);
           if(b>a||(a+b)%2!=0)
              printf("impossible\n");  
           else
           {
              x = (a+b)/2;
              y = a-x;
              if(x<0||y<0)
                 printf("impossible\n"); 
              else
                 printf("%d %d\n",x,y);                             
           }  
       }                 
  }
   
   
  system("pause");
  return 0;   
}

acm 10789: Prime Frequency

[心得] 0.004 
用一個MAP(255 ASCII 最大好像255)陣列,存每個字母出現次數,  如果出現次數大於2才需要判斷(用暴力法判斷是否為質數) ,1非質數

#include <stdio.h>
#include <stdbool.h>

int record;
bool isprime(int temp)
{
  int k;
  for(k=2;k<temp;k++)  
  {                  
      if(temp%k==0)
      {
         return false;
      }  
  }
  record =1;
  return  true;   
}
int main()
{

  int data,i,length,counter=0;
  bool flag= false;
 
  scanf("%d",&data);
  scanf("\n");
  while(data)
  {

     char s[2002];
     while(gets(s)!=NULL)
     {   
              
         int map[256]={0};
         record=0;
         data--;   
         counter++;
         length =strlen(s);
         printf("Case %d: ",counter);
        
         /*for(i=0;i<length;i++)
           printf("s[%d]= %c\n",i,s[i]);*/
        
         for(i=0;i<length;i++)
             map[s[i]]++; 
        
         /*for(i=0;i<255;i++)
           printf("map[%d]= %d\n",i,map[i]); */
                                     
         for(i=0;i<255;i++)                
         {
             if(map[i]>=2)                             
                flag = isprime(map[i]);
             if(flag)
             {
                printf("%c",i);
                flag =false;
             }
          }
          if(!record)
             printf("empty\n");
          else
             printf("\n"); 
      }                   

  }
   
   
 system("pause");
 return 0;   
}