NOIP 2017 9 17 總結 心得

2021-08-08 10:03:24 字數 4506 閱讀 6021

世界真的很大

最近狀態感覺真的很不好。。。考試連續**。。。

倒不是因為想不出來,而是老是在一些細節操作上出問題

看來是時候調整一波狀態了,noip說實話也的卻不遠了

看題先:

【問題描述】

mushroom手中有n個數排成一排,現在mushroom想取乙個連續的子串行,使得這個子串行滿足:最多隻改變乙個數,使得這個連續的子串行是嚴格上公升子串行,mushroom想知道這個序列的最長長度是多少。

【輸入格式】

第一行乙個整數n,表示有n個數。

第二行為n個數。

【輸出格式】

乙個數,為最長長度。

【輸入樣例】

6 7 2 3 1 5 6

【輸出樣例】

5 【樣例解釋】

選擇第2個數到第6個數,把1改變成4即可。

【資料範圍】

對於30%的資料,n<=10

對於60%的資料,n<=1000

對於100%的資料,n<=100000

老實說這道題其實很簡單。。

一開始把題目看錯了,話說既然是連續的為什麼要叫子串行?不是應該叫子串吧?這讓我不得不開始質疑出題人的語文水平。。

一開始我以為就是乙個nlogn的lis再加1,和n取乙個min

發現題讀錯了才開始想正解

也算是秒想吧,dp預處理一邊從每個點開始往後的最長連續上公升子串,每個點往前的最長連續上公升子串

列舉分界點

特判只取一邊然後加1的情況,和n取乙個min

然後我就把我一開始讀錯題的**交上去了。。。

完整**:

#include

#include

using

namespace

std;

const

int inf=0x3f3f3f3f;

int f[100010],a[100010],g[100010],ans=0,n;

int main()

for(int i=n;i>=1;i--)

ans=min(ans+1,n);

for(int i=1;i<=n;i++)

if(a[i+1]-a[i-1]>=2) ans=max(ans,f[i-1]+g[i+1]+1);

printf("%d\n",ans);

return

0;}

【題目描述】

mushroom有一行數,初始時全部是0。現在mushroom有m個區間[l,r],他希望用以下操作得到新的序列。

從m個給定區間中選擇乙個區間[s,t],把區間中的數對應元素全部翻轉。(0變1,1變0)

請告訴mushroom他能得到多少區間。(模10^9+7)

【輸入格式】

第一行包含兩個整數n,m。表示n個數和m個區間。

接下來m行是所表示的區間。

【輸出格式】

乙個整數,表示能得到的區間數。

【樣例輸入】

3 3

1 1

2 2

3 3

【樣例輸出】

8 【資料範圍】

對於30%的資料,n,m<=20

對於60%的資料,n,m<=100

對於100%的資料,n,m<=100000

【樣例解釋】

每個位置都可以單個修改,所以有8種可能。

這道題其實一看就知道應該是那種**量少,思維難度高的題

當時就是直接開始yy

考慮m個區間互不重疊的情況,答案直接就是2^m

然後假設只有兩個區間,如果互不重疊,答案就是4,如果兩個區間有重疊部分,在草稿紙上一畫,好像也是4

然後我靈光一現,大膽推測,答案就是2^m,只不過重複的區間不算數,然後就unique區間去個重,2^cnt

報0後來考完看題解,才知道我這個思路其實沒有錯,但是漏了一種情況

如果有兩個區間首尾相接且不重疊,那麼答案就是4了,如果現在再來乙個大區間,正好把兩區間最左和最右覆蓋完,那麼這個大區間其實是沒有用的

也就是說每個區間算不算數,只需要看他左右兩個端點有沒有通過之前的區間連在一起

然後我們就可以用並查集來維護。

為了區分左和右把左邊搞成l-1

完整**:

#include

#include

using namespace std;

const int mod=1e9+7;

struct seq

a[100010];

bool cmp(const seq &a,const seq &b)

int n,m,ans=1,fa[200010];

int getfather(int

x)int main()

printf("%d\n",ans);

}

【題目描述】

冬眠了五年,光終於從夢中醒來。

千咲、要,大家都在。

隱約記得「昨天」的海船祭,愛花意外成為貢女,沉入海底。

海面冰封,卻有絲絲暖流在冰面之下湧動。

此時,愛花沉睡在祭海女神的墓地。她的胞衣在一點點脫落,化作一簇簇暖流,夾雜著她的感情,向海面上湧去。

愛花,你在**?

五年之後,紡已經成為海洋學研究科的大學生。

在紡的幫助下,光得知了海面下海流的情況。

紡告訴光,暖流一旦產生,就會不斷地向四周擴散,直到遇到海中的岩石。

紅腹海牛,快告訴光,愛花在**。

紡幫你繪製了一張海流情況圖,長度為n,寬度為m。

海很大,一邊有沙灘,一邊一望無際,但長度和寬度都不會超過300。沙灘是金黃色的,所以用y表示。海是藍色的,所以用b表示。暖流很暖和,所以用h表示

海中有大大小小的石頭。石頭很危險,所以用x表示

光相信自己一定能找到愛花(愛花的位置只有一種可能)

【輸入格式】

第一行包括兩個整數n,m。

接下來n行,每行m個字元。

【輸出格式】

僅一行,表示愛花的位置(如果你無能為力,請輸出 -1 ,只要你盡力,光不會責怪你)

【樣例輸入】

5 5

yyyhb

yyhhh

yhhxb

bbhbb

bbbbb

【樣例輸出】

2 3

【資料範圍】

對於30%的資料,n,m<=10

對於70%的資料,n,m<=100

對於100%的資料,n,m<=300

【樣例解釋】

在(2,3)出現第乙個h後,經過3s後,出現樣例輸入的地圖。

p.s. mushroom拜託他gf出的這題= =

題面巨長,巨難懂

最後一句看得我心痛

這道題暴力寫得好的話能a

直接去列舉哪乙個是原點,然後暴力模擬海流擴散的過程

考試的時候寫掛了

特判實在是有點多

記錄乙個海流擴散的時間,看有沒有海流擴散的範圍超過時間的

時間就通過看乙個點周圍有沒有b沒有擴散出去

完整**:

#include

#include

#include

#include

using

namespace

std;

const

int inf=0x3f3f3f3f;

queue

int,int> > state ;

int dis[310][310],vis[310][310],fx[4]=,fy[4]=;

int n,m,anx,any,tim;

char mp[310][310];

bool bfs(int x,int y)

if((mp[x1][y1]=='x' || mp[x1][y1]=='y'))

flag1++;

if( mp[x1][y1]=='h')

flag3++;

}if(x0==1) flag2--;

if(x0==n && n!=1) flag2--;

if(y0==1) flag2--;

if(y0==m && m!=1) flag2--;

if(flag3+flag1!=flag2 &&tim==inf) tim=dis[x0][y0];

}return

true ;

}int main()

printf("-1\n");

return

0;}

這次考試呢,題雖然簡單但是發揮的卻不盡人意

感覺狀態還不是很好

noip臨近了,一邊刷題一邊複習一邊調整狀態吧

以後做簡單題一定要仔細仔細再仔細

交題的時候要檢查檢查再檢查

嗯,就是這樣

比賽心得 NOIP2016總結

這次noip結束了。民間資料的結果出來以後,我對這個結果不是很滿意,覺得有幾點沒有做好 1 為了使 量小一點,我用了一種很不容易找錯的方法。結果只把前面的60 可以騙的測試點過了,其它的都沒過。所以,量大無所謂,首先得保證你的方法好寫 好調,這樣才能保證自己的正確率。2 資料測得太少。比如說第三題。...

NOIP普及組考試心得

考試小技巧 這有幾個關於博主本人的說明 1.c 選手 2.並不熟悉devc 3.2016普及組300分弱雞 這篇文章講述的是博主本人對於noip考試的幾個心得和技巧 目前只是初稿,一些詳細的事務會補上 1.士力架 巧克力 或曼妥思 糖果 不是開玩笑的,在考試的時候給自己隨手丟一顆有助於提神醒腦 2....

5天noip訓練心得

100 95 0 195 t1二分答案,並查集,很像noip2017 day2 t1 t2縮環,然後資料結構維護求答案,貌似也是原題 t3樹形dp,比賽上沒有做出來,90 70 60 220 t1dp隨便維護一下,比賽上沒看清題意,沒有注意到 1的情況 t2樹鏈剖分,我打錯一些細節,只有70分 t3...