java
import java.math.BigInteger;
import java.util.HashMap;
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
HashMap<BigInteger,BigInteger> hs = new HashMap<>();
int num = in.nextInt();
BigInteger sum = BigInteger.valueOf(0);
for(int i = 1; i <= num; i++){
BigInteger a = in.nextBigInteger();
BigInteger b = in.nextBigInteger();
BigInteger temp = hs.getOrDefault(a, BigInteger.ZERO);
sum = sum.add(BigInteger.valueOf(i).multiply(temp));
hs.put(a,b);
}
BigInteger modVal = BigInteger.valueOf(2).pow(64);
System.out.println(sum.mod(modVal));
}
}
描述
给定初始映射 f :[0,264)→[0,264)f:[0,264)→[0,264),对任意 xx 初始 f(x)=0f(x)=0。共有 nn 次操作,每次给定一对整数 (x,y)(x,y),执行:
∙ ∙ 输出 f(x)f(x) 的当前值记为 ansiansi;
∙ ∙ 更新 f(x)←yf(x)←y。
求 ∑i=1ni×ansi(mod264)∑i=1ni×ansi(mod264)。
输入描述:
第一行包含整数 n (1≤n≤5×106)n (1≤n≤5×106);
接下来的 nn 行,每行包含两个整数 x,y (0≤x,y<264)x,y (0≤x,y<264)。
输出描述:
输出一个整数,表示 ∑i=1ni×ansi(mod264)∑i=1ni×ansi(mod264)。
思路:
1.选取合适数据类型,根据题目要求为大整数,Integer和Long不满足要求会触发溢出,所以选择BigInteger类型;
2.利用BigInteger的相关方法进行运算,以及最后取余,需要熟悉BigInteger的相关方法;