題目 1501: [藍橋杯][演算法提高VIP]分蘋果
題目描述
小朋友排成一排,老師給他們分蘋果。
小朋友從左到右標號1…N。有M個老師,每次第i個老師會給第Li個到第Ri個,一共Ri-Li+1個小朋友每人發Ci個蘋果。
最後老師想知道每個小朋友有多少蘋果。
資料規模和約定
100%的資料,N、M≤100 000,1≤Li≤Ri≤N,0≤Ci≤100。
輸入
第一行兩個整數N、M,表示小朋友個數和老師個數。
接下來M行,每行三個整數Li、Ri、Ci,意義如題目表述。
輸出
一行N個數,第i個數表示第i個小朋友手上的水果。
樣例輸入
5 3
1 2 1
2 3 2
2 5 3
樣例輸出
1 6 5 3 3
解題思路:
這道題的解題方式有很多,但錯誤方式也不少,最大最多的問題就是時間超限問題.
這道題的思路就是把每個老師要發的蘋果發給對應的孩子即可.那麼最通用的思路就是迴圈挨個增加,但是這個會時間超限問題.
那麼我們能不能換一個思路,既然一個個去增加不行,那我能不能去提前去把他在那個區間的增量計算出來,然後去從第一個通過+=的方式得到。這樣描述有點兒不合理的,所以我們通過影像來了解一下,這裡我使用上賣弄的樣例進行描述
所以我們可以定義個陣列,就判斷它每一個相對於前一個增加了幾個或減少了幾個,最後通過+=解決即可,具體看程式碼
程式碼如下:
方法一: 這個思路沒有問題,但是時間會超限
import java.util.Scanner;
public class Cyyw1501 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int[][] arr = new int[m+1][3];
int [] num = new int[n+1];
for (int i = 1; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
arr[i][j] = sc.nextInt();
}
for (int j = arr[i][0]; j <= arr[i][1]; j++) {
num[j]+= arr[i][2];
}
}
for (int i = 1; i < num.length; i++) {
System.out.print(num[i]+" ");
}
}
}
方法二 :
import java.util.Scanner;
public class Cyyw1501 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < m; i++) {
int li = sc.nextInt();
int ri = sc.nextInt();
int ci = sc.nextInt();
arr[li-1] += ci;
if (ri < n)
arr[ri] -= ci;
}
int num = 0;
for (int i = 0; i < n; i++) {
num += arr[i];
System.out.print(num+" ");
}
sc.close();
}
}
執行例項:
相關文章
- [藍橋杯][演算法提高VIP]分蘋果 線段樹演算法蘋果
- [藍橋杯][演算法提高VIP]尤拉函式演算法函式
- [藍橋杯][演算法提高VIP]超級瑪麗演算法
- [藍橋杯][演算法提高VIP]大數加法演算法
- [藍橋杯][演算法提高VIP]奪寶奇兵 dp演算法
- [藍橋杯][演算法提高VIP]上帝造題五分鐘 (線段樹+區間最小值)演算法
- [藍橋杯][演算法提高VIP]最大乘積 貪心 雙指標演算法指標
- 藍橋杯演算法提高——字串匹配(Java)演算法字串匹配Java
- 藍橋杯 演算法提高 字串壓縮演算法字串
- [藍橋杯][演算法訓練VIP]方格取數演算法
- 藍橋杯例題-快速分揀
- 藍橋杯練習系統題目集
- 藍橋杯題目編號1265
- 藍橋杯-帶分數
- 藍橋杯真題
- 藍橋杯 演算法提高 P0102(Java解題)演算法Java
- 藍橋杯 -- 演算法提高 身份證號碼升級演算法
- 藍橋杯 演算法提高 拿糖果(完全揹包dp)演算法
- 問題 1462: [藍橋杯][基礎練習VIP]Huffuman樹
- 藍橋杯-買不到的數目
- 藍橋杯-分巧克力
- 藍橋杯-座次問題
- 藍橋杯-日期問題
- Java實現 藍橋杯 演算法提高 八數碼(BFS)Java演算法
- 發現一個可以練習藍橋杯VIP題目的網址
- 藍橋杯—演算法訓練演算法
- 藍橋杯--演算法訓練演算法
- [藍橋杯][基礎練習VIP]矩形面積交
- 藍橋杯 分巧克力(Java)Java
- 藍橋杯競賽題目:”機器人繁殖“解析及題解機器人
- 藍橋杯 排序排序
- [Java] 藍橋杯ADV-203 演算法提高 8皇后·改Java演算法
- 藍橋杯_演算法提高_身份證升級(簡單字元處理)演算法字元
- 2012年 藍橋杯預賽 java 本科 題目Java
- [Java] 藍橋杯ADV-213 演算法提高 3-2求存款Java演算法
- 2016藍橋杯演算法提高——身份證號碼升級演算法
- 藍橋杯 演算法訓練 K好數(Java解題)演算法Java
- 藍橋杯-N皇后