HHHOJ NOIP模擬賽 捌 解題報告

2022-05-14 15:27:30 字數 2356 閱讀 3453

點此進入比賽

得分:\(30+30+70=130\)(弱爆了)

排名:\(rank\ 22\)

\(rating\):\(-31\)

比賽時寫數字\(dp\)寫掛了,最後交了個裸暴力。(後來發現寫掛是因為沒考慮借位的情況)

好吧,其實數字\(dp\)也是可以過的,但是,好像有個更簡單的方法。

對於每一位,我們可以直接列舉出相加與這一位上數字相等的兩個數字(總共只有\(4\)種情況),然後求解即可。

分類討論這裡就省略了,直接看**吧:

#include#define max(x,y) ((x)>(y)?(x):(y))

#define min(x,y) ((x)<(y)?(x):(y))

#define uint unsigned int

#define ll long long

#define ull unsigned long long

#define swap(x,y) (x^=y,y^=x,x^=y)

#define abs(x) ((x)<0?-(x):(x))

#define inf 1e9

#define inc(x,y) ((x+=y)>=mod&&(x-=mod))

#define mod 1000000007

#define calc1(x,y) (((i-(x)-(y))/10+1)%mod*(tot+1)%mod*(x)%mod*(y)%mod)

#define calc2(x,y) (((i-(x)-(y))/10+1)%mod*(tn-tot-1)%mod*(x)%mod*(y)%mod)

using namespace std;

ll n;

class fio

class class_monotone_queue//單調佇列

}data[n+5];

ll h,t;

public:

inline void clear() //清空

inline bool empty() //判斷佇列是否為空

inline key front() //返回隊首

inline key back() //返回隊尾

inline void pushback(key x) //在隊尾加入乙個元素

inline void popfront() //彈出隊首

inline void popback() //彈出隊尾

inline void push(ll x)//加入乙個新的元素

//如果原先的斜率大於當前的斜率,就彈出隊尾,並跳過當前迴圈

for(mid=(l=data[t].l)+(r=data[t].r)>>1;l<=r;mid=l+r>>1) getcost(data[t].s,mid)>getcost(x,mid)?r=mid-1:l=mid+1;//二分求出最早的從當前狀態轉移要優於原先狀態轉移的時刻

if(l<=data[t].r) data[t].r=(lst=l)-1;//更新

break;//退出迴圈

}if(~lst) pushback(key(x,lst,n));//如果有值,將其加入佇列

if(!empty()&&++data[h].l>data[h].r) popfront();//如果隊首所表示區間為空,則將其彈出

}}q;

inline bool check(ll c)//求出額外代價為c時的最優答案以及對應造釀酒廠的個數是否小於等於m

int main()

先吐槽一波比賽時的資料太水(雖然我懶得優化暴力,結果還是沒過)。

現在資料加強了,我本來改完能過的暴力**現在被乙個類似於菊花圖的東西給卡崩了。

暴力我覺得就不用多講了,大不了就是直接暴力修改+詢問。

唯一要注意的地方應該是關於\(vis\)陣列的清空,我比較建議記錄一下每次操作的編號,這樣就可以不用清空陣列,起到了極大程度的優化。

還是談一談正解吧(雖然我還沒過),正解的大致思路是將節點的\(bfs\)序存下來,然後用一棵線段樹維護。

聽起來好像並不難的樣子。

但是,考慮到這是一棵基環外向樹,聽說無論什麼題目一套上乙個基環外向樹就會碼量大增... ...

看了一下\(ac\)**,\(4.0kb\)起步,頓時失去了打的勇氣... ...

**以後再補吧。

HHHOJ NOIP模擬賽 玖 解題報告

點此進入比賽 得分 100 20 100 220 還不錯 排名 rank 16 rating 20 第一眼看完毫無想法。仔細思考,可以發現乙個性質 只要原數數字之和 sum 不能被 3 整除,就說明無解。然後就很簡單了,只要使輸出的 3 個數數字之和全部為 frac3 即可。如下 include d...

20161026模擬賽解題報告

20161026 模擬賽解題報告 by shenben t1 按照題目說的模擬即可 但這題有乙個神坑 當25 個字母都已經一一對應完畢後,剩下的兩個字母預設對應。所有的逆序對之間都會連邊,求最大獨立點集。表面上是個圖論題,其實是個 liso nlogn 求最長上公升子串行的長度 即可ac t3 第一...

8 25模擬賽解題報告

又爆零了,真開心 又是一道考場想出正解打炸的題。t t 這道題其實很簡單,用字典樹略做處理就好了,幾乎可以做模板題了。因為在trie樹上字首相同的字串一開始經過的一些字元肯定是相同的,所以我們在新增或者刪除操作經過一些節點時,將這個點所對應的集合的 sum 值加一就好了,然後 ans 要加上兩個集合...