fork(1) download
  1. $case=0
  2. def calc(v,n,maxh,minh)
  3. vg=[]
  4. k=-1
  5. v.each{|r|k==r[1]?vg[-1]<< r :(k=r[1];vg<<[r])}
  6. # p "#{maxh},#{minh},vg:#{vg}"
  7. maxv=minv=nil
  8. vglast=vg.size-1
  9. 0.upto(vglast){|i|
  10. u1=i==0?0:vg[i-1][0][1]+1
  11. u2=vg[i][0][1]
  12. vs=[]
  13. i.upto(vglast){|j|
  14. d1=j==vglast ?62:vg[j+1][0][1]
  15. d2=vg[j][0][1]+1
  16. vs.push(*vg[j])
  17. next if vs.size<n
  18. break if vs.size>n
  19. # p vs
  20. maxc=(d1-u1)*maxh
  21. minc=(d2-u2)*minh
  22. minv=minc if !minv||minv>minc
  23. maxv=maxc if !maxv||maxv<maxc
  24. }
  25. }
  26. [minv,maxv]
  27. end
  28. def solve(a)
  29. n,*v=a.split(/[:,]/)
  30. n=n.to_i
  31. v=v.map{|t|t.bytes.map{|c|c-(c<58?48:c<91?55:61)}}.sort{|a,b|(a[0]<=>b[0])*2+(a[1]<=>b[1])}
  32. k=-1
  33. hg=[]
  34. v.each{|r|k==r[0]?hg[-1]<< r :(k=r[0];hg<<[r])}
  35. # p n,v,hg
  36. maxv=minv=nil
  37. hglast=hg.size-1
  38. 0.upto(hglast){|i|
  39. l1=i==0?0:hg[i-1][0][0]+1
  40. l2=hg[i][0][0]
  41. vs=[]
  42. i.upto(hglast){|j|
  43. r1=j==hglast ?62:hg[j+1][0][0]
  44. r2=hg[j][0][0]+1
  45. vs.push(*hg[j])
  46. # p vs
  47. vs.sort!{|a,b|(a[1]<=>b[1])*2+(a[0]<=>b[0])}
  48. minc,maxc=calc(vs,n,r1-l1,r2-l2)
  49. minv=minc if minc&&(!minv||minv>minc)
  50. maxv=maxc if maxc&&(!maxv||maxv<maxc)
  51. # p "#{r1},#{r2},#{l1},#{l2},#{maxv},#{minv}",vs
  52. }
  53. }
  54. !minv ? "-" : "#{minv},#{maxv}"
  55. end
  56. def test(a,b)
  57. print $case,":",p(solve(a))==b ?"yes":"no",$/
  58. $case+=1
  59. end
  60.  
  61. #/*0*/
  62. test( "3:Oh,Be,AF,in,eG,ir,l5,Q8,mC,7T,Ty,tT", "108,1920" )
  63. #/*1*/
  64. test( "3:00,zz,0z,z0", "-" )
  65. #/*2*/
  66. test( "1:ho", "1,3844" )
  67. #/*3*/
  68. test( "2:am", "-" )
  69. #/*4*/
  70. test( "4:00,zz,0z,z0", "3844,3844" )
  71. #/*5*/
  72. test( "4:00,11,zz,yy,1y,y1", "3600,3721" )
  73. #/*6*/
  74. test( "2:00,01,10,11,yz,zy,yy,zz", "2,3660" )
  75. #/*7*/
  76. test( "2:AA,AB,BA,BB,SZ,SY,TZ,TY", "2,2046" )
  77. #/*8*/
  78. test( "3:Lw,qw,cw,Ow,2w,fw,yw,ow,Zw,iw", "7,2170" )
  79. #/*9*/
  80. test( "4:0o,0s,0x,0C,0L,0k,0V,0y,0m,0S", "9,2852" )
  81. #/*10*/
  82. test( "5:Tz,gz,Ez,Pz,3z,Jz,iz,Bz,ez,9z", "17,2604" )
  83. #/*11*/
  84. test( "6:mQ,mp,mv,mW,mo,mZ,mC,mc,mt,mH", "23,3100" )
  85. #/*12*/
  86. test( "5:a0,a4,aa,ac,ag,aB,aG,aK,aO,aY,az", "19,2480" )
  87. #/*13*/
  88. test( "10:Ep,Jx,Qh,M7,Zr,lk,yp,Ya,aW,J3,OJ", "1938,3720" )
  89. #/*14*/
  90. test( "5:00,01,10,0y,0z,1z,y0,z0,z1,yz,zz,zy", "3721,3721" )
  91. #/*15*/
  92. test( "7:00,01,10,0y,0z,1z,y0,z0,z1,yz,zz,zy", "-" )
  93. #/*16*/
  94. test( "8:00,01,10,0y,0z,1z,y0,z0,z1,yz,zz,zy,TE", "-" )
  95. #/*17*/
  96. test( "11:bU,cl,d5,Fn,NW,gA,2O,YU,H4,0y,qE,Hd,ZH", "1748,3658" )
  97. #/*18*/
  98. test( "12:SM,cf,AD,6P,cm,mo,if,s0,Mt,GJ,9m,Sp,lA,x4,NE", "1806,3186" )
  99. #/*19*/
  100. test( "2:00,I0,c0,z0,0I,II,cI,zI,0c,Ic,cc,zc,0z,Iz,cz,zz", "19,2520" )
  101. #/*20*/
  102. test( "3:00,I0,c0,z0,0I,II,cI,zI,0c,Ic,cc,zc,0z,Iz,cz,zz", "39,2562" )
  103. #/*21*/
  104. test( "5:00,I0,c0,z0,0I,II,cI,zI,0c,Ic,cc,zc,0z,Iz,cz,zz", "-" )
  105. #/*22*/
  106. test( "6:00,I0,c0,z0,0I,II,cI,zI,0c,Ic,cc,zc,0z,Iz,cz,zz", "741,3660" )
  107. #/*23*/
  108. test( "7:00,I0,c0,z0,0I,II,cI,zI,0c,Ic,cc,zc,0z,Iz,cz,zz", "-" )
  109. #/*24*/
  110. test( "7:00,I0,c0,z0,0I,II,cJ,zI,0c,Ic,cc,zc,0z,Iz,cz,zz", "1178,2623" )
  111. #/*25*/
  112. test( "13:Lk,y3,uO,Gk,sF,7y,ED,FP,rK,vw,Lo,kT,ib,MR,sC,Cu,xQ", "1794,3472" )
  113. #/*26*/
  114. test( "1:lz,en,81,M2,M1,8p,7m,ND,m0,gd,3v,hr,hA,Yr,XB,x2,AR,5Q,3V,B3", "1,1785" )
  115. #/*27*/
  116. test( "2:s1,Dx,yu,H8,c4,6C,95,FK,xV,Q7,h2,Wk,BI,i0,bl,9Q,KF,1q,52,PS,Jh", "6,1824" )
  117. #/*28*/
  118. test( "2:0R,20,fz,0a,0X,zp,P0,0b,0S,zw,e0,0G,g0,06,a0,Zz,zW,zn,00,z6,zq,U0", "2,3660" )
  119. #/*29*/
  120. test( "3:H5,jF,AT,HH,k7,Ho,Mz,07,Tt,Sq,Zh,Yt,e5,oS,qf,YY,JD,bP,s4,hB,TC,PW", "28,1224" )
  121. #/*30*/
  122. test( "4:oe,pg,Np,zP,ho,pe,OV,S0,oM,wO,pM,Ah,Vq,9d,6U,3I,C9,AR,1L,rg,69,as,Nx", "12,1989" )
  123. #/*31*/
  124. test( "2:n0,V0,zL,i0,4z,Nz,xz,z0,z1,0f,P0,zw,80,zC,zB,Az,0P,50,k0,rz,0D,jz,qz,E0", "2,2928" )
  125. #/*32*/
  126. test( "2:tz,0F,0y,zo,0K,01,qz,zU,gz,Xz,zc,0m,zD,Q0,Yz,zb,0a,zp,zW,z7,0o,h0,1z,0p", "2,3660" )
  127. #/*33*/
  128. test( "5:8r,NI,gL,3z,EK,hy,L9,g2,Kh,Gw,Dg,ZB,Sg,LY,ig,sS,I8,U0,DI,cq,Bu,qJ,C4,jP", "143,1520" )
  129. #/*34*/
  130. test( "2:7s,z7,so,zw,X2,59,r1,0Q,70,q2,C6,J6,wz,at,2w,Vq,f9,st,sI,rf,wG,zg,f3,L2,4j", "4,2340" )
  131. #/*35*/
  132. test( "2:kw,Gz,zp,se,8e,2S,C7,1A,B9,5v,AM,sN,zH,m8,Cx,rG,4w,q2,W0,ta,AC,G5,y0,Vq,3i", "4,2080" )
  133. #/*36*/
  134. test( "3:Lr,pX,y7,2Y,qI,6w,t5,R6,e8,57,5f,R1,Up,9q,33,1Z,05,Eu,6S,AW,au,7S,zd,CA,R7", "7,2120" )
  135. #/*37*/
  136. test( "3:ut,0C,6p,5w,9M,uj,I6,sq,Yr,Tz,Bp,p7,Rt,JB,6O,Bw,T1,tY,pn,MA,7I,GC,BO,m0,ts", "12,2016" )
  137. #/*38*/
  138. test( "4:sE,Wy,Oo,uY,4t,os,B1,xq,4j,ex,s7,y7,54,ud,Cj,0L,S7,fx,11,cs,zc,tn,S6,Zq,2r", "56,2400" )
  139. #/*39*/
  140. test( "6:eZ,5V,xT,2x,W7,vy,yT,8R,XT,4c,yX,s9,3E,KZ,tp,Sj,Su,wp,4F,BV,aC,qw,cJ,Gl,aA", "192,1849" )
  141. #/*40*/
  142. test( "7:6Q,av,UZ,0c,IV,fo,Vv,mg,no,qM,06,zy,jW,R0,Qo,sK,wQ,1b,De,Iy,zI,cx,rn,ot,cN,45", "250,2303" )
  143. #/*41*/
  144. test( "4:0A,15,5k,Bi,mz,0f,vr,EZ,4z,vj,6p,vP,8X,16,x7,S3,2z,zJ,wI,wY,Wv,ky,9K,8u,Eo,4s,y0", "48,2700" )
  145. #/*42*/
  146. test( "8:zN,2J,ta,HL,Dg,up,Qn,W8,8K,k4,Is,uL,dT,tA,PN,UQ,DB,gA,OO,lv,4h,Rv,D6,23,Tg,4S,Zb", "418,1763" )
  147. #/*43*/
  148. test( "5:px,sp,cr,dB,fz,65,gq,zb,sN,42,o0,y3,iE,pv,sn,Al,RE,48,l0,7X,DE,xL,wC,qQ,w5,C3,P3,i1", "102,2397" )
  149. #/*44*/
  150. test( "9:Ic,Dk,Ef,6R,GK,NZ,76,L0,oQ,9f,S3,oL,lX,7v,8d,pX,dZ,z7,zx,fR,pe,w7,aj,U9,lO,kv,wL,s0", "396,2088" )
  151. #/*45*/
  152. test( "10:JJ,LR,Xe,kg,LU,lI,3w,ZV,Td,Mu,tA,g8,VC,I7,N8,zN,kY,Ux,3t,mg,4m,FO,Ug,vQ,qY,jl,Ne,Zq,GN", "416,1794" )
  153. #/*46*/
  154. test( "11:lQ,EN,vO,tn,qO,F3,9k,K2,UC,P0,XY,DB,QO,ps,hy,fl,Dt,ex,Vc,vF,Pf,Vk,uo,Xc,Sh,KE,9g,3H,l6", "658,1995" )
Success #stdin #stdout 0.25s 10296KB
stdin
Standard input is empty
stdout
"108,1920"
0:yes
"-"
1:yes
"1,3844"
2:yes
"-"
3:yes
"3844,3844"
4:yes
"3600,3721"
5:yes
"2,3660"
6:yes
"2,2046"
7:yes
"7,2170"
8:yes
"9,2852"
9:yes
"17,2604"
10:yes
"23,3100"
11:yes
"19,2480"
12:yes
"1938,3720"
13:yes
"3721,3721"
14:yes
"-"
15:yes
"-"
16:yes
"1748,3658"
17:yes
"1806,3186"
18:yes
"19,2520"
19:yes
"39,2562"
20:yes
"-"
21:yes
"741,3660"
22:yes
"-"
23:yes
"1178,2623"
24:yes
"1794,3472"
25:yes
"1,1785"
26:yes
"6,1824"
27:yes
"2,3660"
28:yes
"28,1224"
29:yes
"12,1989"
30:yes
"2,2928"
31:yes
"2,3660"
32:yes
"143,1520"
33:yes
"4,2340"
34:yes
"4,2080"
35:yes
"7,2120"
36:yes
"12,2016"
37:yes
"56,2400"
38:yes
"192,1849"
39:yes
"250,2303"
40:yes
"48,2700"
41:yes
"418,1763"
42:yes
"102,2397"
43:yes
"396,2088"
44:yes
"416,1794"
45:yes
"658,1995"
46:yes