15 Mar 2013

The Next Palindrome_SOLVED

/*
CODECHEF
PROBLEM CODE : PALIN
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char K[1000002];
int flag;
int main() 
{
int t,i;
scanf("%d\n",&t);
for(i=0; i<t; i++) 
{
 gets(K);
 int len,i,tmp,t,tmp1;
 len = strlen(K);
 flag = 1;
 for(i=0; i<len; i++) 
   {
    if(K[i] != '9') 
     {
      flag = 0;
      break;
     }
    }
 if(flag == 1) 
   {
    K[0] = '1';
    for(i=1; i<len; i++) K[i] = '0';
    K[len] = '1';
    K[len+1] = '\0';
    goto tada ;
   }
flag = 0;
for(i=0; i<len/2; i++) 
 {
  if(K[i] < K[len-i-1]) 
     flag = -1
  else if(K[i] > K[len-i-1]) 
     flag = 1;
  K[len-i-1] = K[i];
 }
if(flag == -1 || flag==0) 
  {
   t = 0;
   if(len%2 == 0) 
      tmp1 = len/2-1
   else  
      tmp1 = len/2;
   while(K[tmp1-t] == '9')
     {
      K[tmp1-t] = '0';
      K[len-1-tmp1+t] = '0';
      t ++;
  }
 K[tmp1-t] ++;
 K[len-1-tmp1+t] = K[tmp1-t];
 }
 tada:
 printf("%s\n",K);
}
return 0;
}

Categories: , , ,

Poker_SOLVED

/*
CODECHEF
PROBLEM CODE : POKER 
*/
#include<stdio.h>
int main()
{
int cases;
int i,j;
int temp;
int rank[5];
char suit[5],space,ch;
 scanf("%d%c",&cases,&space);
while(cases--)
 {
for(i=0;i<5;i++) 
{
scanf("%c%c%c",&ch,&suit[i],&space);
switch(ch){
case 'A':rank[i]=1;
break;
case 'K':rank[i]=13;
break;
case 'Q':rank[i]=12;
break;
case 'J':rank[i]=11;
break;
case 'T':rank[i]=10;
break;
default:rank[i]=ch-'0';
};
for(j=0;j<i;j++)
if(rank[i]<rank[j]) 
{
temp=rank[i];
rank[i]=rank[j];
rank[j]=temp;

temp=suit[i];
suit[i]=suit[j];
suit[j]=temp;
}
}
i=1;
while(i<5 && suit[i]==suit[0])
i++;
if(i==5) 
{
if(rank[0]==1 && rank[1]==10 && rank[4]==13)
printf("royal flush\n");
else if(rank[4]-rank[0]==4)
printf("straight flush\n");
else
printf("flush\n");
}
else if(rank[3]==rank[0] || rank[4]==rank[1])
printf("four of a kind\n");

else if(rank[2]==rank[0] || rank[3]==rank[1] || rank[4]==rank[2])
 {
if((rank[0]==rank[2] && rank[3]==rank[4])||(rank[0]==rank[1] && rank[2]==rank[4]))
printf("full house\n");
else
printf("three of a kind\n");
}
else if((rank[4]-rank[0]==4)||(rank[0]==1&& rank[1]==rank[4]))
printf("straight\n");
else if((rank[0]==rank[1] &&(rank[2]==rank[3]||rank[3]==rank[4]))||(rank[1]==rank[2] &&rank[3]==rank[4]))
printf("two pairs\n");
else{
for(i=0;i<5 && rank[i]!=rank[i+1];)
i++;
if(i<5)
printf("pair\n");
else
printf("high card\n");
}
}
return 0;
}
 

Categories: , , ,

Random decreasing function_SOLVED

/*

CODECHEF
PROBLEM CODE : RDF

*/

#include <stdio.h>

inline int getn() 
{
  int n=0, c=getchar_unlocked();
  while(c < '0' || c > '9') 
      c = getchar_unlocked();
  while(c >= '0' && c <= '9')
      n = (n<<3) + (n<<1) + c - '0', c = getchar_unlocked();
  return n;
}

double a[100001][31] = {{0}};

int main()
{
int T = getn(), N, K, i,j;
a[2][1] = 0.5, a[3][1] = 1.0, a[3][2] = 1.0/6.0;
 
for(i = 4; i < 100001; i++) 
{
  for(j = 1; j <= 30 && j < i; j++)
   {
    if(j == 1) 
      a[i][j] = a[i-1][j] + 0.5;
    else a[i][j] = (a[i-1][j-1] + a[i-1][j]*(i-1))/(double)i;
    if(a[i][j] <= 1.0/500000.0) 
      break;
   }
}
while(T--)
 {
   N = getn(), K = getn();
   if(!K) 
     printf("%d\n",N);
   else if(K <= 30 && N > K) 
    printf("%.7lf\n",a[N][K]);
   else 
    printf("0\n");
  } 

return 0;
}

Categories: , , ,

Chef Teams_solved


/*
CODECHEF
PROBLEM CODE : CTEAMS
*/ 
#include <stdio.h>
#include <math.h>
#define tausch(a,b) b=a+b, a=b-a, b=b-a
int X[100100][5];
void f3(int i)
{
int l=2*i, r=2*i+1, z=i;
z=(l<=X[2][4]&&X[X[l][2]][0]>X[X[i][2]][0])?l:z;
z=(r<=X[2][4]&&X[X[r][2]][0]>X[X[z][2]][0])?r:z;
if(z!=i)
{
tausch(X[i][2],X[z][2]);
f3(z);
}
}
void f4(int i)
{
int l=2*i, r=2*i+1, Y=i;
Y=(l<=X[3][4]&&X[X[l][3]][0]<X[X[i][3]][0])?l:Y;
Y=(r<=X[3][4]&&X[X[r][3]][0]<X[X[Y][3]][0])?r:Y;
if(Y!=i)
{
tausch(X[i][3],X[Y][3]);
f4(Y);
}
}
void f5(int i)
{
if(X[2][4]<=X[3][4])
{
X[++X[2][4]][2]=i;
X[0][4]+=X[X[X[2][4]][2]][1];
for(X[4][4]=X[2][4]/2,X[5][4]=X[2][4];
 X[5][4]>1&&X[X[X[4][4]][2]][0]<X[X[X[5][4]][2]][0];
  tausch(X[X[4][4]][2],X[X[5]4]][2]),X[5][4]=X[4][4],X[4][4]/=2);
}
else
{
X[++X[3][4]][3]=i;
X[1][4]+=X[X[X[3][4]][3]][1];
for(X[4][4]=X[3][4]/2,X[5][4]=X[3][4]
X[5][4]>1&&X[X[X[4][4]][3]][0]>X[X[X[5][4]][3]][0];
 tausch(X[X[4][4]][3],X[X[5][4]][3]),X[5][4]=X[4][4],X[4][4]/=2);
}
if((X[X[1][2]][0]>X[X[1][3]][0])&&(X[2][4]>0)&&(X[3][4]>0))
{
X[0][4]-=X[X[1][2]][1];
X[1][4]-=X[X[1][3]][1];
tausch(X[1][2],X[1][3]);
X[0][4]+=X[X[1][2]][1];
X[1][4]+=X[X[1][3]][1];
f3(1);
f4(1);
}
printf("%d\n",abs(X[1][4]-X[0][4]));
}
main()
{
int fall, t;
for(X[2][4]=X[3][4]=X[0][4]=X[1][4]=t=!scanf("%d",&fall);
 t++<fall; 
scanf("%d %d",&X[t][0],&X[t][1]),f5(t));
return 0;

}


Categories: , , ,

Copyright © UPgradeCODING | Powered by Blogger