2018 10 12 校內模擬賽

2021-08-28 23:45:21 字數 2832 閱讀 7277

分析(題一) 

一道模擬題

但模擬也是有很多坑的……

寫出一道題後,一定要自己試很多很多很多組不同的資料

比如這道題,幾乎我試的每一組資料都找出了我程式的bug,好險~

分析(題二)

好題!!!!

應該是和松鼠聚會這道題本質一樣的

首先我們需要推導出任意兩個點(x,y) (a,b)之間能夠到達彼此所需要走的最短步數,由於可以斜著走,那麼我們肯定會優先走對角線,然後再直線走到目標位置,對角線的步數:

就可以得到答案

自然想到將其轉為曼哈頓距離

常用套路一用,o(∩_∩)o哈哈~(妙哉,雖然我沒想出來)

分析(題三)

我的暴力……居然爆0

究其原,還是思維有漏洞,大大的bug!!!

想貼一下自己的**,然後好好吐槽一下自己

改了下面兩個地方後,就多了33分,感謝wcr大佬!!!orz

再次感謝cyk大佬!!!讓我又一躍成了50分

#include#define in read()

#define n 500009

#define lc (k<<1)

#define rc (k<<1)|1

#define inf 1000000009

using namespace std;

inline int read()

return f==1?res:-res;

}int n,a[n],minn[4*n],m,lzy[4*n],b[n];

void build(int k,int l,int r)

int mid=l+r>>1;

build(lc,l,mid);build(rc,mid+1,r);

minn[k]=min(minn[lc],minn[rc]);

}void pushdown(int k)

int query(int k,int l,int r,int x,int y)

pushdown(k);

int mid=l+r>>1,res=inf;

if(x<=mid) res=min(res,query(lc,l,mid,x,y));

if(y>mid) res=min(res,query(rc,mid+1,r,x,y));

return res;

} int main()

else printf("-1\n");

}} }

else

else

}} }

return 0;

}

現在來講一下正解吧 

修改比較簡單,就是線段樹的區間修改

因為現在我們將區間[l,r]中所有小於 x 的數都賦為  x ,那麼 x 肯定就是此時的區間最小值

維護一下就好了

只是需要注意,若這個區間的最小值本就大於  x  ,那我們是修改不了的

所以取個max

然後對於查詢

我們觀察一下資料範圍,可以發現 k 總和都不超過5*10^6,是個突破口

所以我們查詢區間[l,r]中比 x小的最小的 k 個數,就可以變成求k 次區間最小值,每求完一次就暫時將這個位置的值賦為inf,避免其對下次求最小值有影響,然後在這次操作完了之後將所有的「最小值」還原其本來的值

操作細節:由於我們需要還原,所以我們得記錄下每個最小值的位置。那就用乙個二元組(pair)來儲存線段樹中每個節點的資訊。first  -- > 值,second-->位置

**走一波(稍微需要卡一下常)

#include#define in read()

#define n 500009

#define lc (k<<1)

#define rc (k<<1)|1

#define inf 1000000009

using namespace std;

inline int read()

return f==1?res:-res;

}int n,a[n],m,lzy[4*n];

pairminn[4*n];

inline void build(int k,int l,int r)

int mid=l+r>>1;

build(lc,l,mid);build(rc,mid+1,r);

minn[k]=min(minn[lc],minn[rc]);

}inline void pushdown(int k)

pairquery(int k,int l,int r,int x,int y)

inline void insert(int k,int l,int r,int p,int x)

if(lzy[k]) pushdown(k);

int mid=l+r>>1;

if(p<=mid) insert(lc,l,mid,p,x);

else insert(rc,mid+1,r,p,x);

minn[k]=min(minn[lc],minn[rc]);

}int main()

else

v.push_back(mn);

insert(1,1,n,mn.second,inf);

}if(!flag) for(i=0;i

else printf("-1");

printf("\n");

for(i=0;i

} }

return 0;

}

1105 校內模擬賽

題一 差分約束or帶權並查集?不啊,zz了,簡單模擬即可 我簡直服了我自己了,想複雜了 直接對每乙個聯通塊隨便找乙個點賦位置,然後dfs繼續找下去,給每乙個點賦值,如果在搜尋的過程中,發現了有衝突,就是impossible了 注意加邊的時候加雙向邊,因為你是從隨便乙個點開始搜尋的 然後這麼簡單的乙個...

2018 9 27 校內模擬賽

a dna 題目大意 給定乙個長度為n,每項值為1或2的數列。有q次詢問,對於每次詢問回答乙個區間 l,r 使得區間內的和等於xi。時間限制 1000ms 空間限制 256mb 編譯指令 開啟o2和c 11 solution 容易發現,若存在乙個權值和為 x x 2 的串,必然存在乙個權值和 為 x...

校內模擬賽 試題

早有預感這次考試是要爆零 早有預感這次考試會有圖論題。題目大致是這樣的 t1 奶牛碑文 t2 小x學游泳 t3 計算係數 t4 最優乘車 考前打了半個多小時hl,一氣打得3d眩暈了 由於著急回家,今天考試打得十分倉促,還提前交了卷 題發下來後就是個打暴力。第一題一眼看不出正解,就一口氣打了個o n ...