51 nod 1305 Pairwise Sum and Divide
阿新 • • 發佈:2018-12-20
1305 Pairwise Sum and Divide
- 1 秒
- 131,072 KB
- 5 分
- 1 級題
有這樣一段程式,fun會對整數陣列A進行求值,其中Floor表示向下取整:fun(A) sum = 0 for i = 1 to A.length for j = i+1 to A.length sum = sum + Floor((A[i]+A[j])/(A[i]*A[j])) return sum給出陣列A,由你來計算fun(A)的結果。例如:A = {1, 4, 1},fun(A) = [5/4] + [2/1] + [5/4] = 1 + 2 + 1 = 4。
有這樣一段程式,fun會對整數陣列A進行求值,其中Floor表示向下取整:
fun(A)
sum = 0
for i = 1 to A.length
for j = i+1 to A.length
sum = sum + Floor((A[i]+A[j])/(A[i]*A[j]))
return sum
給出陣列A,由你來計算fun(A)的結果。例如:A = {1, 4, 1},fun(A) = [5/4] + [2/1] + [5/4] = 1 + 2 + 1 = 4。
收起展開全文
輸入
第1行:1個數N,表示陣列A的長度(1 <= N <= 100000)。 第2 - N + 1行:每行1個數A[i](1 <= A[i] <= 10^9)。
輸出
輸出fun(A)的計算結果。
輸入樣例
3
1 4 1
輸出樣例
4
思路:(x+y)/xy化簡之後就是1/x+1/y,向下取整之後,在x,y不為1時,除非x=y=2,否則其它任何數都會被直接化為0,所以說當x,y都為2時,總值加1,當x,y為1時,總值加2,x,y,為1和2時,總值加1。
附java程式碼:
import java.util.Scanner; public class Demo { public static void main(String []args){ int []a = new int[100001]; Scanner sc = new Scanner(System.in); int n,i; n = sc.nextInt(); for(i=0; i<n; ++i){ a[i] = sc.nextInt(); } int num_2=0,sum=0; for(i=0; i<n; ++i){ if(a[i] == 1){ sum+=n-1; } else if(a[i] == 2) num_2++; } System.out.println(sum+num_2*(num_2-1)/2); sc.close(); } }