結果
問題 | No.148 試験監督(3) |
ユーザー | uwi |
提出日時 | 2015-02-12 17:47:32 |
言語 | Java21 (openjdk 21) |
結果 |
AC
|
実行時間 | 524 ms / 1,000 ms |
コード長 | 5,958 bytes |
コンパイル時間 | 4,333 ms |
コンパイル使用メモリ | 82,924 KB |
実行使用メモリ | 60,332 KB |
最終ジャッジ日時 | 2024-06-23 19:08:03 |
合計ジャッジ時間 | 8,972 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 180 ms
52,092 KB |
testcase_01 | AC | 261 ms
52,588 KB |
testcase_02 | AC | 320 ms
52,432 KB |
testcase_03 | AC | 323 ms
52,064 KB |
testcase_04 | AC | 399 ms
52,188 KB |
testcase_05 | AC | 282 ms
51,988 KB |
testcase_06 | AC | 387 ms
57,284 KB |
testcase_07 | AC | 509 ms
59,796 KB |
testcase_08 | AC | 524 ms
60,332 KB |
testcase_09 | AC | 139 ms
54,352 KB |
testcase_10 | AC | 140 ms
54,592 KB |
testcase_11 | AC | 72 ms
51,052 KB |
ソースコード
package q3xx; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.Arrays; import java.util.InputMismatchException; public class Q371_4F { static InputStream is; static PrintWriter out; static String INPUT = ""; static final int INTERVAL = 2000000; static int d(char[] a,int l){int r=0,j=l+4;for(;j>=l;j--)r=r*93+a[j]-(a[j]+1880)/58;return r;} static final char[] enigma = "! cTce(f$*L$NT-6%r9PB$0fO,*B5:;!U#$7#BJlN%QosC)6;TU'[<DU(A$4! 9cvR)R+/9 $](#!K8-9,<0FN'$5G:(Yr<a+srr`*eGY^*r9>?%Tl`?&o=7y$Ljeu O;6[#'Ss%$p*y2+!6)q+s?#C 0txk qrT7+km`/!dhrT%1]bB)Et$m+f?Wn(rvjo%9duz(*5P`#Y'bg(YMs-'Jbas&.)$#-Pb%s,Y.cp* <v.!)# h O>|8#FnUF-^M2O-Sm8W(foqX !Ux[ u+Hi$:m*9*~wb2 O>_A&PeI]&~#&p).l+8#ztE:(dS m(zZz$+U63@);^J8$r&_l 4/2<&&lB-#]+ |-'XbQ'v}'*!3M6r'K@y! R>{N$V+o>%Gx*y&n C(!v8ft)9gRZ#&T8,' !fp#-|n&,71T&*CaTt YRkY#f6V`%F(l+!SWqb w;s>(!%/a%Gg?{$N#Z= GL] +nUTL!!U8G!P1C8(G4pA%H[ I)?.7M-u{)3$aDqJ(r*JA,EB1C-0({a*@b~1$F6c0-vZ{V''sw/,a?_x%Ameu*iK*j+X#}<#{7ST!;66X$jws8$7nmI'5&@:!-`PS!PH+n!SjXO*&POu%r2|Y$6'='!J`eO!YL,D!x~#S%$)_J!kkwF'5?Km!06mu(V6;e%[Z,6,[7Ap*OVKv#$8I:)SyN)&O1+!-%j4e >yBY&5DG.#IAy7.+2A#'nVp`)(FWb'A8TQ AOA/'u#^0'Cd2Y)x][x)Z3: **WM`#E.T8,=yjg'bhfd!HEy~$Pq>e(lD:@+|`&f#RWPG --Pq%Rz{>'<[%q(1/5Y+vS#}'Qy~M%*4n='1'xI%])Y4'wJ6-%/M?h(zu(i-yaJ|,-YA2,XZw/&:rAa*S(5U*vOW*,CQ%w <t9R#fM1Z-8T?p+j,o#,'ka0.vw^}!<=dk,:D&D*Gm`$%Avg5$;c@V-i5LA%mNBS!212w#XxjF#,U.9->a4n&_:1]&UbJl 0n*'!.5bf&Q;L6%!5&V-#i;V-'C<.,DnK>.*+<?*^1t_$V~GC-8]+z,rptk%!LAj(5`K]%pQp`!8lu=$jb]X(mu-l#2<|~!L6?-%P=$Q$S5mH+9Zn7.)%G(#B![P*Iw/$'`U02'^Hog)Mh}T ;[O#*!yQN-%l!a$t%2B%N)}C$2etG()jp(+!4B/-&OWZ*KIBa&};u` >`+_##L??!aI3~*X&-^'Kdnd*8+;{$?(NF*#L,l*NgBA P}Bu#lgkd%e5cl*K=f.'0>a5 :4Iw PHQF&y.[=!~McG oaTT,:b^7#V&9Y*sEv-)ua,/&2zV+*jN<2%q*Ow&s4JH$jFGP)=wSE(,cr;-wW.C%!3?u!n5y9*;#{N#99~T(Buey'UI'>*J3vz%;5t6-VZT@-D5+F+3m*R)n1#U'ke#2'HS4a+5D|A*M]|p+rXM+)Mz`E#~XYk'x'X&+NxFA,4r%L sDxn&,?nj#C!Qh#2Unh!&6O`)U|' (~>/@ )3sx+yl`a*Z4'D*r|[h$jQ.}(mjk%%0x0^$Y,c^ b?OU-`e?^ i6<M'A]NB%'9 y)rKRv-iiPm%}N/K&,J**'#t/`!Ne(=--P[L'Lce6#Z+5(-wR^w%8w:3&02h?$`jJ>%W[b6!]=B4 ej/z*Iu]L%L5:>!)~#<+kd0s,IR@k(bS%<-lRc2.NR^~%5R?I$P]iE*aZ.,%L-5G#lrb*)Uf;_$Lw+,*{&1_-{;Ud'#Vg$,cA-D*BcvU%=,mu+Y(/_ W4yl-f>FM-CbBQ%qu.[,$YOK)vFvn&>p.f!QV%',Ajw:-u7)?(Q^YE,2>n4*fVzV(z{Yp#ZsJF&9p]r)VMKh#&RnR'#b|g$)Q6.(w$W!&9Te?-ZZHy#n]UC*-]vR,'oQv#z8co+Hs,>$bMqq+AUgK,S5{@)WO4T(X%NF'n.M''YqC^ g3,})I<Xl'c.D~,Xf0x,&J9d$=yEA)/4Em+csy{,6GjF)X%H<-m~U +{i1a(.mz<#&ooi(]W-4 ,+Zd#kiui,MqU2.XG'S$=|xO+/H'`&#m&>*[tA0#OTf6(aXC8,T'|G)[x-Y$l3J#!;9V]&KVd$+:2P~)#NiX'8OY@!5,7T)VQ'I-,tIt+XZjH&BhP- '~ /.?m)C(e96!,?NZ^-zn%9,H5hz,Lpco,Y-%U!j|.6$1DAi$S@xR(`M$B+RPqH$U}A;-eOk'+~,g'%zjY/#Ie>E)V'ca+|6Aw+0:UQ+X>jC*P{V;$Z2#. pT+/+@T V'S$AR!>$)p(~OGY*5:ft dF{b%_eBY'Dv|<#mk s%/^Uv-KQ&V!Wyk0$K*wW#fh3I!uF9Y+1#|/$BMY2 `@KG+oEF_ [ReN,W,gR*x+w@-xz9,!o'/v#tw C#S]}F!M |- wCg4%w/OL*v*;^-9Fhh$&J0H NDbv-Ny/8-w'p#-qz>q'v)IZ!MyWW'ToZ4#1X)9-m+!w*igG1(Au*%&~z'O,0Y;~%[pk ,u1y| $vb?,2Fy])t0%h#pwmI+(=h~(N[R@*]\r\n".toCharArray(); static void solve() { for(int T = ni();T >= 1;T--){ String C = ns(), P = ns(); if(P.length() >= 11){ out.println(0); continue; } long pl = Long.parseLong(P); if(pl >= mod){ out.println(0); continue; } long cl = 0; if(C.length() >= 12){ for(char x : C.toCharArray())cl = (cl*10+x-'0')%mod; }else{ cl = Long.parseLong(C); if(cl-(2*pl-1)+1 <= 0){ out.println(0); continue; } } long sup = (cl-(pl-1))%mod; long inf = (cl-(2*pl-1))%mod; if(inf < 0)inf += mod; if(sup < 0)sup += mod; if(sup < inf){ out.println(0); continue; } out.println(f((int)sup)*invl(f((int)inf), mod)%mod); } } public static long invl(long a, long mod) { long b = mod; long p = 1, q = 0; while (b > 0) { long c = a / b; long d; d = a; a = b; b = d % b; d = p; p = q; q = d - c * q; } return p < 0 ? p + mod : p; } static long f(int n) { int h = n%INTERVAL; if(h < INTERVAL/2){ long mul = d(enigma, n/INTERVAL*5); int base = n/INTERVAL*INTERVAL; for(int i = base+1;i <= n;i++){ mul = mul * i % mod; } return mul; }else{ long mul = 1; int base = n/INTERVAL*INTERVAL+INTERVAL; for(int i = base;i > n;i--){ mul = mul * i % mod; } return invl(mul,mod)*d(enigma, n/INTERVAL*5+5)%mod; } } static int mod = 1000000007; public static void main(String[] args) throws Exception { long S = System.currentTimeMillis(); is = INPUT.isEmpty() ? System.in : new ByteArrayInputStream(INPUT.getBytes()); out = new PrintWriter(System.out); solve(); out.flush(); long G = System.currentTimeMillis(); tr(G-S+"ms"); } private static byte[] inbuf = new byte[1024]; static int lenbuf = 0, ptrbuf = 0; private static int readByte() { if(lenbuf == -1)throw new InputMismatchException(); if(ptrbuf >= lenbuf){ ptrbuf = 0; try { lenbuf = is.read(inbuf); } catch (IOException e) { throw new InputMismatchException(); } if(lenbuf <= 0)return -1; } return inbuf[ptrbuf++]; } private static boolean isSpaceChar(int c) { return !(c >= 33 && c <= 126); } private static int skip() { int b; while((b = readByte()) != -1 && isSpaceChar(b)); return b; } private static String ns() { int b = skip(); StringBuilder sb = new StringBuilder(); while(!(isSpaceChar(b))){ // when nextLine, (isSpaceChar(b) && b != ' ') sb.appendCodePoint(b); b = readByte(); } return sb.toString(); } private static int ni() { int num = 0, b; boolean minus = false; while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-')); if(b == '-'){ minus = true; b = readByte(); } while(true){ if(b >= '0' && b <= '9'){ num = num * 10 + (b - '0'); }else{ return minus ? -num : num; } b = readByte(); } } private static void tr(Object... o) { if(INPUT.length() != 0)System.out.println(Arrays.deepToString(o)); } }