分析(題一)
一道模擬題
但模擬也是有很多坑的……
寫出一道題後,一定要自己試很多很多很多組不同的資料
比如這道題,幾乎我試的每一組資料都找出了我程式的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 ...