日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

爱奇艺笔试题之成长值计算

發布時間:2024/1/8 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爱奇艺笔试题之成长值计算 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意如下:

成長值計算
時間限制:C/C++語言 1000MS;其他語言 3000MS
內存限制:C/C++語言 65536KB;其他語言 589824KB
題目描述:
愛奇藝累計有2000萬會員,為了提高會員權益以及減少運營成本,我們需要對用戶分等級差異化運營,為此我們制定了用戶成長體系,按成長值(最小為0)劃分為不同等級。成長值計算公式為:
會員成長值=每天成長值+任務成長值
現在我們輸入一組數據,表示用戶的成長值計算規則,比如某個用戶的每天成長值規則1 1 5 10,第一列1表示每日成長值規則,第二列1表示該條規則的生效開始時間,第三列5表示該條規則的生效截至時間,第四列10表示該條規則的每天成長值,則用戶初始值為0,第1天到第5天,每天成長值10點,則第5天成長值為50;另外任務成長值規則,比如2 3 4,第一列2表示該規則為任務成長值,第二列3表示第三天做任務,第三列4表示該天做任務得到成長值4。現在輸入一組數據,每行一條成長規則,每日成長規則生效時間重合時以成長數值最大的為準,每日成長值是每天0點更新,任務成長值是0點以后,要求計算成長值規則對應最后一天成長值。
輸入
輸入數據有多行,第一列為1時,該行會有4個數值,第一列為2時,該列會有3個數值
輸出
對于每個測試實例,初始成長值都為0,計算成長值規則最后一天的用戶成長值。


樣例輸入
1 1 5 10
2 3 4
1 4 6 -5
樣例輸出
49



解決該問題可以用最直接的思路,首先將每條規則存下來,然后從最小天數開始到最大天數依次得到下一個要計算的區間,例如樣例中,首先是1-5,每天成長值為10(因為第一條規則第五天的成長值大于第三條,所以第五天的成長值按照第一條規則來計算),下一條規則是5-6,每天成長值為 -5,最后再加上任務的成長值可以得到最總結果為49.


以上思路可以解決問題,但是總體解決思路比較亂,需要考慮的情況有很多,因為有可能很多條規則都有重復,這時候需要遍歷這些規則找到最合適下一條規則。

還有另一種思路,即將成長區間轉化為每天的成長,化整為零,這樣思路就簡單了很多。具體操作如下:

首先將每條規則都讀取進來,并且在讀取的時候就確定開始時間與結束時間,然后聲明一個數組,大小為總的天數,數組中每個元素代表該天的成長值。然后再遍歷每條規則,將該規則的成長值寫入到該數組中,當然,每天的成長值都取最大的那個成長值。最后,將該數組求和即可。

具體代碼如下:


import java.util.ArrayList; import java.util.List; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int value = 0;int minDay = Integer.MAX_VALUE;int maxDay = Integer.MIN_VALUE;List<Integer> mins = new ArrayList<>();List<Integer> maxs = new ArrayList<>();List<Integer> values = new ArrayList<>();while (in.hasNextLine()) {String line = in.nextLine();if (line.isEmpty())break;String[] strs = line.split(" ");if (strs.length == 3) {if (Integer.valueOf(strs[2]) > 0)value += Integer.valueOf(strs[2]);} else {int min = Integer.valueOf(strs[1]);int max = Integer.valueOf(strs[2]);if (min < minDay) minDay = min;if (max > maxDay) maxDay = max;mins.add(min);maxs.add(max);values.add(Integer.valueOf(strs[3]));}}int[] DICT = new int[maxDay + 1];for (int j = minDay; j <= maxDay; ++j) {DICT[j] = Integer.MIN_VALUE;}for (int i = 0; i < mins.size(); ++i) {for (int j = mins.get(i); j <= maxs.get(i); ++j) {if (DICT[j] < values.get(i)) {DICT[j] = values.get(i);}}}for (int i = minDay; i <= maxDay; ++i) {value += DICT[i];}System.out.println(value);} }

總結

以上是生活随笔為你收集整理的爱奇艺笔试题之成长值计算的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。