time limit: 1 second
memory limit: 128 mb
【問題描述】
有乙個整數序列,我們不知道她的長度是多少(即序列中整數的個數),但我們知道在某些區間中至少有多少個整數,用區間
[ai,bi,ci]來描述它,[ai,bi,ci]表示在該序列中處於[ai,bi]這個區間的整數至少有ci個。現在給出若干個這樣的區間,
請你求出滿足條件的最短序列長度是多少。如果不存在則輸出 -1。
【輸入格式】
第一行包括乙個整數n(n<=1000),表示區間個數;
以下n行每行描述這些區間,第i+1行三個整數ai,bi,ci,由空格隔開,其中0<=ai<=bi<=1000 而且 1<=ci<=bi-ai+1。
【輸出格式】
檔案輸出只有乙個整數表示滿足要求序列長度的最小值。
sample input
5 3 7 3
8 10 3
6 8 1
1 3 1
10 11 1
sample output
【題目鏈結】:
【題解】
先把n個ai,bi,ci按照ai第一關鍵字,bi第二關鍵字公升序排;
然後逆序處理n個關係;
優先選ai..bi這個區間裡面的前面部分(當然如果這個區間裡面有些數字已經被選了就不用再選了),這樣優先選前面的部分,就能讓前面的關係更容易利用公共的部分;就是這樣的貪心吧.
轉換成程式語言就是公升序列舉啦^_^
(想不出來什麼情況會無解..)
【完整**】
#include
#include
using
namespace
std;
const
int maxn = 1000+100;
struct abc
};int n;
bool bo[maxn];
abc t[maxn];
int main()
if (t[i].c!=0)}}
int si = 0;
for (int i = 0;i <= 1000;i++)
if (bo[i])
si++;
printf("%d\n",si);
return
0;}
NOIP模擬 11 6 T2 序列操作
題目描述 一開始有 n 個非負整數 h i 1 i n 接下來會進行 m 次操作,第 i 次操作給出乙個數 c i 要求你選出 c i 個大於0的數並將它們減去1。問最多可以進行多少輪操作後無法操作 即沒有 c i 個大於0的數 輸入格式 第一行兩個數表示 n 和 m。第二行 n 個數描述 h i ...
校內測 10 28 T2 序列區間 暴力
傳送門 看到每個數最大只能是1e8 1e81e 8,最多有2e5 2e52e 5個數,而k kk最大是1e5 1e51e 5,所以我們的乘積最大也只能到2e18 2e18 2e18 所以除了1 11,我們最多隻會算log loglo g個數,所以考慮把相鄰的1 11縮成乙個數,其他的數暴力算 inc...
leetcode115,字串T中序列S的個數
原文 問題描述 給定乙個字串 s 和乙個字串 t,計算在 s 的子串行中 t 出現的個數。乙個字串的乙個子串行是指,通過刪除一些 也可以不刪除 字元且不干擾剩餘字元相對位置所組成的新字串。例如,ace 是 abcde 的乙個子串行,而 aec 不是 示例1 輸入 s rabbbit t rabbit...