題面
預計得分:70 + 60 + 30 = 160
實際得分:40 + 60 + 0 = 100
t1陣列開小了
t2比賽結束後5min ac
t3加了個記憶話搜尋wa了、、
zbq吊打std啊orz
此題$o(nlog)$做法:
乙個很顯然的思路:對每個做括號維護乙個大根堆,每次取最大的。
但是這樣有不優的情況,比如$()), 1, 3, 5$
那麼我們還需要對每個已經加入的右括號維護乙個小根堆。每次判斷是否替換掉更小的會更優
#include#include#include
#include
#define ll long long
using
namespace
std;
const
int maxn = 2 * 1e5 + 10, inf =1e9;
inline
intread()
while(c >= '
0' && c <= '
9') x = x * 10 + c - '
0', c =getchar();
return x *f;
}int
n;priority_queue
mx;priority_queue
, greater >mi;
char
s[maxn];
inta[maxn];
intmain()
else
if(!mi.empty() && a[i] > mi.top()) ans -= mi.top(), mi.pop(), ans +=a[i], mi.push(a[i]);
}printf("%d
", ans);
return0;
}
很顯然每個位置就那麼幾種可能
直接暴力判斷就好,字首和優化
/*60:直接bfs
*/#include
#include
#include
#define ll long long
using
namespace
std;
const
int maxn = 1e5 + 10, inf =1e9;
inline
intread()
while(c >= '
0' && c <= '
9') x = x * 10 + c - '
0', c =getchar();
return x *f;
}int
n, m, k;
int a[1001][1001], down[maxn], vis[1001][1001
];struct
node p[maxn];
bool pd(int x, int
y) int hsum[1001][1001], lsum[1001][1001
]; bool line(int x1, int y11, int x2, int y2, int
id)
if(y11 ==y2)
}int
main() ;
}for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
hsum[i][j] = hsum[i][j - 1] +a[i][j],
lsum[i][j] = lsum[i - 1][j] +a[i][j];
int ans = 0
;
for(int i = 1; i <= k; i++)
if(flag == 1) continue
;
for(int k = 1; k <= m; k++)
if(!line(xx2, yy2, xx2, k, i) && !line(xx2, k, xx1, k, i) && !line(xx1, yy1, xx1, k, i))
}printf("%d
", ans);
return0;
}/*20 20 3
1 1 20 20
2 1 2 20
3 1 1 20
3 3 3
1 3 2 2
1 1 3 3
1 2 2 1
*/
神仙題。
很顯然答案是一棵樹,那麼直接書上倍增就好
滿分做法不會。。
noip模擬賽 密碼
表示沒看懂演算法3 問題描述 有壓迫,就有反抗。mored的寵物在法庭的幫助下終於反抗了。作為乙隻聰明的寵物,他打算把魔法使mored的魔法書盜去,奪取mored的魔法能力。但mored怎麼會讓自己的魔法書輕易地被盜取?mored在魔法書上設定了乙個密碼鎖,密碼鎖上有乙個問題。施以斯臥鋪魔法吧,你有...
NOIP模擬賽 老師
題目描述 一座有n層的教學樓裡有一些學生,第i 0 i n 層有studentsi個學生。你被給定了乙個數k,如果第i層有x個學生,那麼這一層需要 x k 個老師。你可以調整每個學生的樓層,但是每個學生至多只能調整一層,就是說第i層的學生只能去第i 1層 如果有的話 第i層 第i 1層 如果i 1 ...
NOIP模擬賽 分錢
題目描述 兩個人在街上撿到了一些錢,這些錢共有n張,他們等了很久也沒有等來失主,於是決定把錢平分。但錢可能無法平分。他們先把能夠平分的錢盡量先平分了,使得剩下不能平分的錢盡量少。這些不能平分的錢怎麼辦呢他?他們決定拿去賭場裡面賭一把。他們運氣太好了,那些不能平分的錢變成了雙倍,於是他們就把那個錢分了...