PAT乙级真题
1008 数组元素循环右移问题
题目描述

代码实现
Java
import java.io.*;
public class Main {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws IOException {
String[] s=in.readLine().split(" ");
int n=Integer.parseInt(s[0]),offset=Integer.parseInt(s[1])%n;
int[] a=new int[n];
s=in.readLine().split(" ");
for(int i=0; i<n; i++)a[i]=Integer.parseInt(s[i]);
if(offset==0){
for(int i=0; i<n; i++)System.out.print(a[i]+(i!=n-1?" ":""));
}else{
for(int i=n-offset;i<n;i++)System.out.print(a[i]+" ");
for(int i=0;i<n-offset;i++)System.out.print(a[i]+(i!=n-offset-1?" ":""));
}
}
}
1013 数素数
题目描述

代码实现
Java
import java.io.*;
import java.util.*;
public class Main {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws IOException {
int N=(int)1e5+4730;
int[] prime=new int[N];
int cnt=0;
boolean[] isp=new boolean[N];
Arrays.fill(isp, true);
isp[0]=false; isp[1]=false;
for(int i=2; i<N; i++){
if(isp[i]) prime[cnt++]=i;
for(int j=0; j<cnt&&i*prime[j]<N; j++){
isp[i*prime[j]]=false;
if(i%prime[j]==0)break;
}
}
String[] s=in.readLine().split(" ");
int a=Integer.parseInt(s[0]),b=Integer.parseInt(s[1]);
for(int i=a-1,j=1; i<=b-1; i++){
System.out.print(prime[i]+(i!=b-1?(j++%10==0?"\n":" "):""));
}
}
}
1014 福尔摩斯的约会
题目描述

代码实现
Java
import java.io.*;
import java.util.*;
public class Main {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws IOException {
String[] day={"MON","TUE","WED","THU","FRI","SAT","SUN"};
String s1=in.readLine(),s2=in.readLine();
String s3=in.readLine(),s4=in.readLine();
int len1=Math.min(s1.length(), s2.length()),len2=Math.min(s3.length(), s4.length());
int i=0;
StringBuffer res=new StringBuffer();
char tmp;
while(i<len1){
tmp=s1.charAt(i);
if(tmp==s2.charAt(i)&&tmp>='A'&&tmp<='G'){
res.append(day[tmp-65]+" "); i++; break;
}
i++;
}
while(i<len1){
tmp=s1.charAt(i);
if(tmp==s2.charAt(i)&&((tmp>='0'&&tmp<='9')||(tmp>='A'&&tmp<='N'))){
int ot=tmp>='A'&&tmp<='N'?tmp-55:tmp-'0';
res.append((ot<10?"0"+ot:ot)+":"); break;
}
i++;
}
i=0;
while(i<len2){
tmp=s3.charAt(i);
if(tmp==s4.charAt(i)&&tmp>='A'&&tmp<='z'){
res.append((i<10?"0"+i:i)); break;
}
i++;
}
System.out.println(res);
}
}
1020 月饼
题目描述

代码实现
Java
import java.io.*;
import java.util.*;
public class Main {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
static int N,maxd;
public static void main(String[] args) throws IOException {
String[] s=in.readLine().trim().split("\\s");
N=Integer.parseInt(s[0]); maxd=Integer.parseInt(s[1]);
MoonCake[] moon=new MoonCake[N];
s=in.readLine().trim().split("\\s");
String[] s1=in.readLine().trim().split("\\s");
for(int i=0; i<N; i++){
moon[i]=new MoonCake(Double.parseDouble(s[i]),Double.parseDouble(s1[i]));
}
Arrays.sort(moon);
double sum=0.0;
int i=0;
while(maxd>0&&i<N){
if(maxd<=moon[i].num){
sum+=maxd*moon[i].basic;
maxd=0;
}
else{
sum+=moon[i].total_price;
maxd-=moon[i].num;
}
i++;
}
out.printf("%.2f", sum);
out.flush();
}
}
class MoonCake implements Comparable<MoonCake>{
double num,total_price,basic;
public MoonCake(double num, double total_price) {
super();
this.num = num;
this.total_price = total_price;
this.basic=total_price/num;
}
@Override
public int compareTo(MoonCake o) {
return (int) (10*(o.basic-this.basic));
}
}
1023 组个最小数
题目描述

代码实现
Java
import java.io.*;
import java.util.*;
public class Main {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
String[] s=in.readLine().split("\\s");
int[] num=new int[60];
int cnt=0;
for(int i=0; i<10; i++){
if(!s[i].equals("0"))
for(int j=0; j<Integer.parseInt(s[i]); j++)num[cnt++]=i;
}
StringBuffer zero=new StringBuffer(),nomal=new StringBuffer();
for(int i=0; i<cnt; i++){
if(num[i]==0)zero.append(num[i]);
else nomal.append(num[i]);
}
nomal.insert(1, zero.toString());
out.println(nomal);
out.flush();
}
}
1025 反转链表
题目描述


代码实现
Java
import java.io.*;
public class _1025_反转链表 {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
static int init,N,K; //首结点地址 结点数 反转数
public static void main(String[] args) throws IOException {
// 输入
String[] s=in.readLine().split("\\s");
init=Integer.parseInt(s[0]); N=Integer.parseInt(s[1]);
ad_Node[] no=new ad_Node[(int)1e5]; //散列记录
K=Integer.parseInt(s[2]);
int address;
for(int i=0; i<N; i++){
s=in.readLine().split("\\s");
address=Integer.parseInt(s[0]);
no[address]=new ad_Node(address,Integer.parseInt(s[1]),Integer.parseInt(s[2]));
}
//初始化链表
ad_Node[] origin=new ad_Node[(int)1e5+10];
int cnt=0;// 实际结点数
address=init; // 用于迭代地址
while(address!=-1){
origin[cnt++]=no[address];
address=no[address].next_ad;
}
//反转链表 双指针对称交换
ad_Node temp;
int r;
for(int i=K-1; i<cnt; i+=K){
r=i;
for(int j=i-K+1; j<r; j++,r--){
temp=origin[r];
origin[r]=origin[j];
origin[j]=temp;
}
}
// Stack<ad_Node> st=new Stack<>();
// for(int i=0; i+K<=cnt; i+=K){
// for(int j=i; j<i+K; j++) st.push(origin[j]);
// for(int j=i; j<i+K; j++) origin[j]=st.pop();
// }
//输出
for (int i = 0; i < cnt-1; i++) {// next_ad 即为下一个结点的地址,反转过程中不用变
out.printf("%05d %d %05d\n",origin[i].address,origin[i].data,origin[i+1].address);
}
out.printf("%05d %d -1\n",origin[cnt-1].address,origin[cnt-1].data);
out.flush();
}
}
class ad_Node {
int address,data,next_ad;
public ad_Node(int address, int data, int next_ad) {
this.address = address;
this.data = data;
this.next_ad = next_ad;
}
}
python
import sys
class Node:
address: int
data: int
next: int
def __init__(self, address, data, next_ads):
self.address = address
self.data = data
self.next = next_ads
init, N, K = map(int, sys.stdin.readline().split())
no = [Node for i in range(int(1e5))]
for i in range(N):
a = list(map(int, sys.stdin.readline().split()))
no[a[0]] = Node(a[0], a[1], a[2])
origin = [Node for i in range(int(1e5) + 10)]
cnt = 0
ads = init
while ads != -1:
origin[cnt] = no[ads]
ads = no[ads].next
cnt += 1
# 双指针对称交换
# for i in range(K-1, cnt, K):
# r = i
# j = i - K + 1
# while j < r:
# temp = origin[r]
# origin[r] = origin[j]
# origin[j] = temp
# r -= 1
# j += 1
# 栈
stack = []
for i in range(0, cnt-K+1, K):
for j in range(i, i+K):
stack.append(origin[j])
for j in range(i, i+K):
origin[j] = stack.pop()
for i in range(cnt - 1):
print("{:05d} {:d} {:05d}".format(origin[i].address, origin[i].data, origin[i + 1].address))
print("{:05d} {:d} {}".format(origin[cnt - 1].address, origin[cnt - 1].data, -1))
1027 打印沙漏
题目描述


代码实现
Java
import java.io.*;
public class Main {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
String[] s=in.readLine().split(" ");
int n=Integer.parseInt(s[0]);
int l=1,r=23,mid=0;
while(l<r){
mid=(l+r+1)>>1;
if((mid<=1?1:1+2*(mid-1)*(mid+1))<=n) l=mid;
else r=mid-1;
}
int i=r,sum=2*r-1;
while(i>0){
for(int m=0; m<(sum-(2*i-1))>>1; m++) out.print(' ');
for(int j=1; j<=2*i-1; j++) out.print(s[1]);
i--;
out.println();
}
i=2;
while(i<=r){
for(int m=0; m<(sum-(2*i-1))/2; m++) out.print(' ');
for(int j=1; j<=2*i-1; j++) out.print(s[1]);
i++;
out.println();
}
out.println(n-(r<=1?1:1+2*(r-1)*(r+1)));
out.flush();
}
}
python
import sys
def total(x):
return 1 + 2 * (x - 1) * (x + 1)
def item(x):
return 2 * x - 1
n, s = map(str, sys.stdin.readline().split())
n = int(n)
l, r, mid = 1, 23, 0
while l < r:
mid = (l + r + 1) // 2
if total(mid) <= n:
l = mid
else:
r = mid - 1
i, num = r, item(r)
while i > 0:
print((num - item(i)) // 2 * ' ', end='')
print(item(i) * s)
i -= 1
i = 2
while i <= r:
print((num - item(i)) // 2 * ' ', end='')
print(item(i) * s)
i += 1
print(n - total(r))
1028 人口普查
题目描述

代码实现
Java
import java.io.*;
public class Main {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
int y,m,d;
int n=Integer.parseInt(in.readLine()),num=0;
String[] s;
Birth[] a=new Birth[(int)1e5+10];
Birth old=new Birth(),young=new Birth();
while(n-->0){
s=in.readLine().split("\\s+");
y=Integer.parseInt(s[1].substring(0, 4));
m=Integer.parseInt(s[1].substring(5, 7));
d=Integer.parseInt(s[1].substring(8));
if(!check(y,m,d)) continue;
a[num++]=new Birth(y,m,d,s[0]);
if(num==1){
old=new Birth(a[num-1].year,a[num-1].month,old.data=a[num-1].data,a[num-1].name);
young=new Birth(a[num-1].year,a[num-1].month,old.data=a[num-1].data,a[num-1].name);
}
else{
if(shape(a[num-1])<shape(old)){
old.year=a[num-1].year; old.month=a[num-1].month;
old.data=a[num-1].data; old.name=a[num-1].name;
}
if(shape(a[num-1])>shape(young)){
young.year=a[num-1].year; young.month=a[num-1].month;
young.data=a[num-1].data; young.name=a[num-1].name;
}
}
}
out.printf("%d %s %s",num,old.name,young.name);
out.flush();
}
private static int shape(Birth b) {
return 10000*b.year+100*b.month+b.data;
}
private static boolean check(int y, int m, int d) {
if(y<1814||y>2014) return false;
if((y==1814&&m<9)||(y==2014&&m>9)) return false;
if((y==1814&&m==9&&d<6)||(y==2014&&m==9&&d>6)) return false;
return true;
}
}
class Birth{
int year,month,data;
String name;
public Birth(){}
public Birth(int year, int month, int data, String name) {
this.year = year;
this.month = month;
this.data = data;
this.name = name;
}
}
python
import sys
class Birth:
name: str
shape: int
def __init__(self, name, shape):
self.name = name
self.shape = shape
num = 0
n = int(input())
a = [Birth for i in range(10 + int(1e5))]
old, young = Birth("", 20140906), Birth("", 18140906)
def check(y, m, d):
if y < 1814 or y > 2014:
return False
if (y == 1814 and m < 9) or (y == 2014 and m > 9):
return False
if (y == 1814 and m == 9 and d < 6) or (y == 2014 and m == 9 and d > 6):
return False
return True
for i in range(n):
s = list(map(str, sys.stdin.readline().split()))
y, m, d = int(s[1][0:4]), int(s[1][5:7]), int(s[1][8:])
if not check(y, m, d):
continue
a[num] = Birth(s[0], int(1e4)*y+100*m+d)
if a[num].shape < old.shape:
old.shape = a[num].shape
old.name = a[num].name
if a[num].shape > young.shape:
young.shape = a[num].shape
young.name = a[num].name
num += 1
if num ==0:
print(0)
else:
print("{} {} {}".format(num, old.name, young.name))
1029 旧键盘
题目描述

代码实现
Java
import java.io.*;
import java.util.*;
public class Main {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
String[] test=in.readLine().split("");
String res=in.readLine();
Set<String> set=new HashSet<>();
for(String c:test){
if(!res.contains(c)&&!set.contains(c.toUpperCase())){
out.print(c.toUpperCase());
set.add(c.toUpperCase());
}
}
out.flush();
}
}
python
import sys
tst, res = sys.stdin.readline(), sys.stdin.readline()
a = set()
for c in tst:
if c not in res and c.upper() not in a:
print(c.upper(), end='')
a.add(c.upper())
1030 完美数列
题目描述

代码实现
Java
import java.io.*;
import java.util.*;
// 终点线性递减,起点二分查找
/**
* 6 3 1 7 8 9 20 1000
*/
public class _1030_完美数列 {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
String[] s = in.readLine().split("\\s");
int N = Integer.parseInt(s[0]);
long p = Long.parseLong(s[1]);
long[] a = new long[N];
s = in.readLine().split("\\s");
for (int i = 0; i < N; i++)
a[i] = Long.parseLong(s[i]);
Arrays.sort(a);
int l, mid, r;
int len = -1;
for (int j = N - 1; j >= 0; j--) {
l = 0;
r = j;
while (l < r) {
mid = (l + r) >> 1;
if (a[mid] * p >= a[j])
r = mid;
else
l = mid + 1;
}
len = Math.max(len, j - r + 1);
}
out.println(len);
out.flush();
}
}
python
import sys
N, p = map(int, sys.stdin.readline().split())
a = list(map(int, sys.stdin.readline().split()))
a.sort()
len = -1
i = N - 1
while i >= 0:
l, r = 0, i
while l < r:
mid = (l + r) // 2
if a[mid] * p >= a[i]:
r = mid
else:
l = mid + 1
len = max(len, i-r+1)
i -= 1
print(len)
1034 有理数四则运算
题目描述

代码实现
Java
import java.io.*;
public class _1034_有理数四则运算 {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
// 读取输入的两个有理数
String[] s = in.readLine().split("\\s");
String[] ss = s[0].split("/");
Num n1 = new Num(Integer.parseInt(ss[0]), Integer.parseInt(ss[1]));
ss = s[1].split("/");
Num n2 = new Num(Integer.parseInt(ss[0]), Integer.parseInt(ss[1]));
// 依次进行加法、减法、乘法和除法运算,并输出结果
out.println(add(n1, n2));
out.println(subtract(n1, n2));
out.println(multiply(n1, n2));
out.println(divide(n1, n2));
out.flush();
}
private static String divide(Num n1, Num n2) {
// 计算有理数相除的结果
return n1.union(n2, " / ") + new Num(n1.a * (n2.a < 0 ? -1 : 1) * n2.b, n1.b * n2.a * (n2.a < 0 ? -1 : 1)).num;
}
private static String multiply(Num n1, Num n2) {
// 计算有理数相乘的结果
return n1.union(n2, " * ") + new Num(n1.a * n2.a, n2.b * n1.b).num;
}
private static String subtract(Num n1, Num n2) {
// 计算有理数相减的结果
long fmu = lcm(n1.b, n2.b);
return n1.union(n2, " - ") + new Num(fmu / n1.b * n1.a - fmu / n2.b * n2.a, fmu).num;
}
private static String add(Num n1, Num n2) {
// 计算有理数相加的结果
long fmu = lcm(n1.b, n2.b);
return n1.union(n2, " + ") + new Num(fmu / n1.b * n1.a + fmu / n2.b * n2.a, fmu).num;
}
// 计算两个数的最小公倍数
static long lcm(long a, long b) {
return a * b / gcd(a, b);
}
// 计算两个数的最大公约数
static long gcd(long a, long b) {
return b == 0 ? a : gcd(b, a % b);
}
}
class Num {
long a, b, k, sim_a, sim_b; // 分子 分母 整数部分 最简分子 最简分母
boolean flag_k = true; // 是否是假分数
StringBuffer num = new StringBuffer();
public Num(long a, long b) {
this.a = a;
this.b = b;
// 处理除数为0的情况
if (b == 0) {
num.append("Inf");
return;
}
// 计算整数部分、最简分子和最简分母
this.k = a / b;
sim_a = Math.abs(a) < b ? a : a % b;
long m = gcd(Math.abs(sim_a), b);
sim_a = sim_a / m;
sim_b = this.b / m;
// 生成有理数的字符串表示
if (this.k != 0)
num.append((this.k < 0 ? "(" : "") + this.k);
else
flag_k = false;
if (sim_a != 0)
num.append((flag_k ? " " : (sim_a < 0 ? "(" : "")) + (flag_k && this.k < 0 ? -1 : 1) * sim_a + "/" + sim_b);
else if (!flag_k)
num.append(0);
if ((flag_k && this.k < 0) || (!flag_k && sim_a < 0))
num.append(")");
}
public String union(Num n2, String op) {
StringBuffer res = new StringBuffer();
res.append(num + op + n2.num + " = ");
return res.toString();
}
static long gcd(long a, long b) {
return b == 0 ? a : gcd(b, a % b);
}
}
python
import sys
import math
def gcd(a, b):
return a if b == 0 else gcd(b, a % b)
def lcm(a, b):
return a * b // gcd(a, b)
class Num:
a: int
b: int
k: int
sim_a: int
sim_b: int
flag_k = True
num = ""
def __init__(self, a, b):
self.a, self.b = a, b
if b == 0:
self.num = "".join("Inf")
return
self.k = int(a / b)
self.sim_a = a if math.fabs(self.a) < self.b else (a % b if a>=0 else -1*a%b)
m = gcd(int(math.fabs(self.sim_a)), b)
self.sim_a = self.sim_a // m
self.sim_b = self.b // m
strs = []
if self.k != 0:
strs.append(("(" if self.k < 0 else "") + str(self.k))
else:
self.flag_k = False
if self.sim_a != 0:
strs.append((" " if self.flag_k else ("(" if self.sim_a < 0 else "")) + str(
int(math.fabs(self.sim_a)) if self.flag_k and self.k < 0 else self.sim_a) + "/" + str(self.sim_b))
elif not self.flag_k:
strs.append("0")
if (self.flag_k and self.k < 0) or (not self.flag_k and self.sim_a < 0):
strs.append(")")
self.num = "".join(strs)
def union(self, n2, op):
return "".join(self.num + op + n2.num + " = ")
def divide(n1: Num, n2: Num):
return n1.union(n2, " / ") + Num(n1.a*(-1 if n2.a < 0 else 1)*n2.b, n1.b*n2.a*(-1 if n2.a < 0 else 1)).num
def multiply(n1: Num, n2: Num):
return n1.union(n2, " * ")+Num(n1.a*n2.a, n2.b*n1.b).num
def subtract(n1: Num, n2: Num):
fmu = lcm(n1.b, n2.b)
return n1.union(n2, " - ")+Num(fmu//n1.b*n1.a-fmu//n2.b*n2.a, fmu).num
def add(n1: Num, n2: Num):
fmu = lcm(n1.b, n2.b)
return n1.union(n2, " + ")+Num(fmu//n1.b*n1.a+fmu//n2.b*n2.a, fmu).num
s1, s2 = map(str, sys.stdin.readline().split())
s1, s2 = s1.split("/"), s2.split("/")
n1, n2 = Num(int(s1[0]), int(s1[1])), Num(int(s2[0]), int(s2[1]))
print(add(n1, n2))
print(subtract(n1, n2))
print(multiply(n1, n2))
print(divide(n1, n2))
1037 在霍格沃茨找零钱
题目描述

代码实现
Java
import java.io.*;
public class Main {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
String[] s=in.readLine().split("\\s");
String[] s1=s[0].split("\\."),s2=s[1].split("\\.");
int[] P=new int[3],A=new int[3];
P[0]=Integer.parseInt(s1[0]);
P[1]=Integer.parseInt(s1[1]);
P[2]=Integer.parseInt(s1[2]);
A[0]=Integer.parseInt(s2[0]);
A[1]=Integer.parseInt(s2[1]);
A[2]=Integer.parseInt(s2[2]);
StringBuffer str=new StringBuffer();
boolean flag=check(P,A);
int gall=flag?A[0]-P[0]:P[0]-A[0],
sic=flag?A[1]-P[1]:P[1]-A[1],
knut=flag?A[2]-P[2]:P[2]-A[2];
if(knut<0){
knut+=29; sic-=1;
}
if(sic<0){
sic+=17; gall-=1;
}
if(!flag) str.append("-");
str.append(gall+"."+sic+"."+knut);
out.println(str); out.flush();
}
private static boolean check(int[] p, int[] a) {
if(a[0]!=p[0]) return a[0]>p[0];
else if(a[1]!=p[1]) return a[1]>p[1];
else if(a[2]!=p[2]) return a[2]>p[2];
return true;
}
}
1043 输出PATest
题目描述

代码实现
Java
import java.io.*;
public class Main {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
static boolean[] visit;
static char[] dir;
public static void main(String[] args) throws IOException {
String s = in.readLine().trim(), bas = "PATest";
int n = s.length(), cnt = 0;
char[] ss = new char[n];
char c = 0;
for (int i = 0; i < n; i++) {
c = s.charAt(i);
if (bas.contains(c + ""))
ss[cnt++] = c;
}
visit = new boolean[cnt];
dir = bas.toCharArray();
int N = cnt;
// while (N != 0) {
// for (int i = 0; i < 6; i++) {
// for (int j = 0; j < cnt; j++) {
// if (!visit[j] && ss[j] == dir[i]) {
// out.print(ss[j]);
// visit[j] = true;
// N--;
// break;
// }
// }
// }
// }
dfs(N,cnt,ss,"");
// out.flush();
}
private static void dfs(int n, int cnt, char[] ss,String str) {
if(n==0){
out.println(str);
out.flush();
return;
}
for (int i = 0; i < 6; i++) {
for (int j = 0; j < cnt; j++) {
if (!visit[j] && ss[j] == dir[i]) {
str=str+ss[j];
visit[j] = true;
n--;
break;
}
}
}
dfs(n,cnt,ss,str);
}
}
1049 数列的片段和
题目描述

代码实现
python
import sys
from decimal import Decimal
N = int(input())
a = list(map(Decimal, sys.stdin.readline().split()))
sum = [Decimal for i in range(N)]
for i in range(N):
sum[i] = a[i] + (0 if i - 1 < 0 else sum[i - 1])
sum_0 = 0
for i in range(N):
sum_0 += sum[i]
total = sum_0
for i in range(1, N):
sum_0 -= a[i-1] * (N-i+1)
total += sum_0
print("{:.2f}".format(total))

浙公网安备 33010602011771号