NOIP2017模擬 區間

2021-08-10 08:13:01 字數 1243 閱讀 7432

2017.11.3 t1 2032

樣例資料

輸入

3 2

1 2 1

1 2

4 5

輸出

2

6

分析:這道題為什麼要放在t1……考得我懷疑人生。本來也只會暴力找,對於30%的資料我是這樣的:先離散化,再二維陣列記錄所有顏色的在每個位置的字首和,然後四層迴圈暴力查詢。

而正解是:先離散化,再把每種顏色的每乙個位置壓入vector陣列,然後查詢到某兩個顏色的時候就在這兩個顏色的vector陣列裡查詢,用乙個sum,是第一種顏色就sum++,第二種顏色就sum–,這樣sum相同地方之間的區域就是兩種顏色出現次數一樣的區間,計算貢獻。

**

我那30%都打錯了,就不獻醜了……這是100%

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

int getint()

for(;isdigit(ch);ch=getchar())

sum=(sum<<3)+(sum<<1)+ch-48;

return sum*f;

}const int n=8005,m=500005;

struct node

q[m];

int n,m,q;

int a[n],b[n],cnt[n<<1],exist[n<<1],ans[m];

vectorp[n];

bool comp(const node &a,const node &b)

void lsh()//把顏色、詢問離散化並把顏色的位置放到vector裡(先看solv會更好理解)

}void solv(int

x,int

y,int vt)

else//是另一種顏色,sum--,其他一樣的

}ans[vt]=tmp;//把ans放到對應的位置

}int main()

本題結。

NOIP2017模擬 鴨舌

題目 小美喜歡吃鴨舌。有乙個 n 個點的樹,每個節點 i 第 i 個點上有 ai 個鴨舌。小美一開始處於 x 號點。每次小美可以選擇乙個與現在的點有邊的點而且那個點還有鴨舌,那麼小美會走到那個點並吃乙個鴨舌。要保證小美最後還是走到 x 號點。問小美最多能吃幾個鴨舌?輸入格式 輸入第一行乙個整數 n ...

NOIP2017模擬 舉辦比賽

2017.8.27 t1 1946 樣例資料1 輸入5 5 1 2 3 4 5 輸出 樣例資料2 輸入10000000 10000000 555 888 777 666 12345 輸出 分析 第一次做這種隨機概率題 看到資料那麼大o n 的做法根本想不到就直接放棄了。結果就是個撞運氣的ffffff...

NOIP2017模擬 太空電梯

2017.8.29 t1 1952 樣例資料 輸入6 6 1 2 3 3 4 5 輸出 分析 基本上是用貪心,就是找正好一胖一瘦沒法一起進電梯的一前一後,如果瘦的無法滿足,就和另外乙個瘦子一起把電梯人數擠滿 注意最後只剩乙個人時也要搭一次電梯 include include include incl...