出題人大概已經去為國家處理積壓子彈了?
貪心,讓每乙隻青蛙(我慫行吧)都盡量往遠跳,能到達的最遠的被踩了就跳次遠的,以此類推。可以維護乙個單調佇列,表示每只青蛙的位置(開始都是0)。然後按順序掃一遍每個石頭,如果隊首的青蛙不能跳過去就放棄它直接pop掉,如果能跳就把石頭位置從隊尾push進去並pop掉隊首的舊位置,最後佇列的size就是答案。因為你肯定不能可著乙個青蛙往前跳,必須盡量不讓任何乙隻掉隊,所以乙隻跳完之後把它丟到隊尾。
比較神奇的是這道題用stl會比手寫佇列快300ms??
#include#includestl:deque#include
#include
using
namespace
std;
const
int n=1e6+5
;int
t,n,m,d,l;
inta[n];
void
work()
if(q.size()==m)puts("
excited");
else printf("
%d\n
",q.size());
}int
main()
#include#include陣列好題,先咕著#include
#include
using
namespace
std;
const
int n=1e6+5
;int
t,n,m,d,l;
inta[n],q[n];
void
work()
if(tail-head+1==m)puts("
excited");
else printf("
%d\n
",tail-head+1);}
intmain()
用線段樹維護操作的題還是第一次見
線段樹上的區間指的是一段連續的操作區間,而不是實際的序列
維護$add$(加了多少層)$del$(刪了多少層)$sum$(有多少量)$lsum(被兄弟刪除後的量,僅對左兒子維護)$
$up()$的時候如果左兒子不夠右兒子刪,直接清0即可。但要是右兒子刪不完左兒子就很麻煩了。需要專門設計乙個函式計算當前區間中刪了x個元素的和。
(於是我又懶癌發作了)
#include#includeview code#include
using
namespace
std;
intread()
while(isdigit(ch))
return x*f;
}const
int n=2e5+55
;#define ls(k) k<<1
#define rs(k) k<<1|1
intm,q;
struct
ques
q[n];
int del[n<<2],add[n<<2],lsum[n<<2],sum[n<<2
];int query(int k,int
val)
void up(int
k)
else
}void build(int k,int l,int
r)
int mid=l+r>>1
; build(ls(k),l,mid);build(rs(k),mid+1
,r);
up(k);
}void update(int k,int l,int r,int pos,int op,int
val)
int mid=l+r>>1
;
if(pos<=mid)update(ls(k),l,mid,pos,op,val);
else update(rs(k),mid+1
,r,pos,op,val);
up(k);
}int
main()
return0;
}
沒有打噁心至極的大常數正解,其實優化暴力+卡常跑出來和正解的時間相差無幾。
%%%whs式迴圈展開 tql 帥過wys
優化暴力的思路就是每層矩形只列舉最上面的那條邊上的點,因為有了這條邊上乙個點的座標就可以完成矩形上四個點的旋轉,所以只列舉一條邊上的點就能完成整個矩形的旋轉。
然後調整邊長和左上角座標,對每層矩形都來一遍就好了。複雜度其實相比最暴力的沒有變,但是迴圈次數少了,相當於一種迴圈展開。
當然還要稍作卡常,$int$轉$char$ $getchar$讀入 $putchar$輸出啥的
#include#includeview code#include
#define re register
using
namespace
std;
const
int n=3005
;int
n,m,q,x,y,c;
char
a[n][n],b[n][n];
inline
intread()
while(isdigit(ch))x=x*10+ch-'
0',ch=getchar();
return x*f;
}int
main()
while(q--)}}
for(re int i=1;i<=n;i++)
return0;
}
模擬16 題解
貪心,對於每只青蛙,跳的時候盡量遠,越遠選擇越多 注意若用set實現,要先insert 0 1 include2 include3 include4 include5 include6 include 7 define r register 8using namespace std 9 inline...
NOIP模擬20 題解
來自達哥的問候 究級難題,完全不可做qaq include include include using namespace std typedef long long ll int n ll a 25 b 25 c 25 d 25 ans void dfs int step,ll mdx,ll lh...
NOIP 模擬17 題解
部分分很肥,正解寫得常數稍大就會和暴力乙個分,考試的時候寫什麼自己考慮。滑稽 部分分的迴圈邊界手抖寫錯了 25 原本暴力分中的10分都沒了啊啊啊 沒寫掛的話應該有75,其實就是二維字首和 暴力列舉點對統計 a i j 都相等時只枚舉子矩形大小再乘上這種大小出現的次數。正解 sum r sum l 1...