#G 123
时间限制: 5.0s 内存限制: 512.0MB 本题总分:20 分
问题描述
思路: 先定义一个数组 然后存 1 12 123 1234 12345 ...
然后用数组下标 定义取第几个数到第几个数 然后求和
小蓝发现了一个有趣的数列,这个数列的前几项如下:
1,1,2,1,2,3,1,2,3,4,...
小蓝发现,这个数列前 1 项是整数 1 ,接下来 2 项是整数 1 至 2 接下来 3 项是整数 1 至 3 接下来 4 项是整数 1 至 4 ,依次类推。
小蓝想知道,这个数列中,连续一段的和是多少。
输入格式
输入的第一行包含一个整数 T ,表示询问的个数。
接下来 T 行,每行包含一组询问,其中第 i 行包含两个整数 li和 ri,表示询问数列中第 li个数到第 ri个数的和。输出格式
输出 T 行,每行包含一个整数表示对应询问的答案。
测试样例1
Input:
3
1 1
1 3
5 8Output:
1
4
8
评测用例规模与约定对于 10 1010% 的评测用例,1 ≤ T ≤ 30 , 1 ≤ l i ≤ r i ≤ 100。
对于 20 2020% 的评测用例,1 ≤ T ≤ 100 , 1 ≤ l i ≤ r i ≤ 1000。
对于 40 4040% 的评测用例,1 ≤ T ≤ 1000 , 1 ≤ l i ≤ r i ≤ 10^6 。
对于 70 7070% 的评测用例,1 ≤ T ≤ 10000 , 1 ≤ l i ≤ r i ≤ 10^9。
对于 80 8080% 的评测用例,1 ≤ T ≤ 1000 , 1 ≤ l i ≤ r i ≤ 10^12。
对于 90 9090% 的评测用例,1 ≤ T ≤ 10000 , 1 ≤ l i ≤ r i ≤ 10^12。
对于所有评测用例,1 ≤ T ≤ 100000 , 1 ≤ l i ≤ r i ≤ 1 0^12。
import java.util.Arrays;
import java.util.Scanner;
public class _7_1 {
public static void main(String[] args) {
// 存数列
int arr[] = new int[999];
int k = 0;
for (int i = 1; i < 999; i++) {// 好多数
for (int j = 1; j <= i; j++) {// 每次从1开始
if (k < 999) {
arr[k] = j;
k++;
}
}
}
//System.out.println(Arrays.toString(arr));
// 输入T
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
// T代表几行 所以我们定义一个T行的二维数组
int a[][] = new int[T][2];
// 然后我们写起始位置和结束位置 就是输入 1 1 1 3 5 8的
for (int i = 0; i < T; i++) {
a[i][0] = sc.nextInt();
a[i][1] = sc.nextInt();
}
// 然后我们取a中的位置作为arr中的下标 就是取数累加了
// 然后我们定义一个 sum数组来累加每一行的值
int sum[] = new int[T];
for (int i = 0; i < T; i++) {// T行
for (int j = a[i][0] - 1; j <= a[i][1] - 1; j++) {
sum[i] += arr[j];
}
}
for (int i = 0; i < sum.length; i++) {
System.out.println(sum[i]);
}
}
}
跑数据的话 数组调大一点应该能得部分分 。