點此進入比賽
得分:\(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 要加上兩個集合...