結果
問題 | No.2046 Ans Mod? Mod Ans! |
ユーザー | merlin |
提出日時 | 2022-08-19 22:39:35 |
言語 | Java21 (openjdk 21) |
結果 |
AC
|
実行時間 | 491 ms / 4,000 ms |
コード長 | 1,643 bytes |
コンパイル時間 | 3,005 ms |
コンパイル使用メモリ | 77,276 KB |
実行使用メモリ | 58,708 KB |
最終ジャッジ日時 | 2024-05-09 17:27:20 |
合計ジャッジ時間 | 9,971 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 257 ms
41,836 KB |
testcase_01 | AC | 255 ms
41,596 KB |
testcase_02 | AC | 252 ms
41,704 KB |
testcase_03 | AC | 259 ms
41,672 KB |
testcase_04 | AC | 255 ms
41,816 KB |
testcase_05 | AC | 260 ms
41,968 KB |
testcase_06 | AC | 258 ms
41,656 KB |
testcase_07 | AC | 251 ms
41,748 KB |
testcase_08 | AC | 262 ms
42,004 KB |
testcase_09 | AC | 279 ms
42,120 KB |
testcase_10 | AC | 276 ms
42,068 KB |
testcase_11 | AC | 291 ms
43,360 KB |
testcase_12 | AC | 282 ms
42,760 KB |
testcase_13 | AC | 395 ms
48,820 KB |
testcase_14 | AC | 387 ms
49,096 KB |
testcase_15 | AC | 411 ms
50,724 KB |
testcase_16 | AC | 414 ms
51,324 KB |
testcase_17 | AC | 403 ms
51,800 KB |
testcase_18 | AC | 411 ms
52,076 KB |
testcase_19 | AC | 405 ms
52,224 KB |
testcase_20 | AC | 491 ms
58,708 KB |
ソースコード
import java.io.*; import java.util.*; class Main { public static void main(String args[])throws Exception { BufferedReader bu=new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb=new StringBuilder(); int n=Integer.parseInt(bu.readLine()); String s[]=bu.readLine().split(" "); /* a[i]%a[j]-a[j]%a[i]; consider a[i]<a[j], as a[i]=a[j] will yield 0 a[j]-k*a[i] will be a[j]%a[i] and a[i]%a[j] will be a[i] */ int N=200005; long sum[]=new long[N+1],c[]=new long[N+1]; int a,i; for(i=0;i<n;i++) { a=Integer.parseInt(s[i]); update(sum,a,a,N); update(c,a,1,N); } long ans=0; for(i=N;i>0;i--) { long here=query(c,i)-query(c,i-1); //how many i's are there in array int j=1; long aij=0,aji; while(j*i<=N) { long count=query(c,Math.min(j*i+i-1,N))-query(c,j*i-1); long tot=query(sum,Math.min(j*i+i-1,N))-query(sum,j*i-1); aij+=tot-count*i*j; j++; } aji=(query(c,N)-query(c,i))*i; ans+=Math.abs(aij-aji)*here; } System.out.println(ans); } static void update(long bit[],int i,int v,int n) { while(i<=n) { bit[i]+=v; i+=i&-i; } } static long query(long bit[],int i) { long s=0; while(i>0) { s+=bit[i]; i-=i&-i; } return s; } }