【】 6591 HDU
UNSOLVED
【】 6592 HDU
UNSOLVED
【】 6593 HDU
UNSOLVED
【】 6594 HDU
UNSOLVED
【】 6595 HDU
SOLED
Expected probability, be a purely mathematical problem
#include<cstdio> #include<iostream> #define ll long long const int MAXN = 3001; const int mod = 998244353; ll ans[MAXN]; ll qpower(ll a, ll x) { ll res = 1; ll down = a; while (x) { if (x & 1) { res = (res*down) % mod; } down = (down*down) % mod; x = x >> 1; } return res; } void init() { for (int i = 1; i <MAXN; i++) { ans[i] = ((i * (i - 1))%mod)*qpower(3, mod - 2); ans[i] %= mod; ans[i] = (ans[i] + ans[i - 1]) % mod; } for (int i = 1; i < MAXN; i++) { ans[i] = (ans[i] * qpower(i, mod - 2))%mod; } } signed main() { int n; init(); while (~scanf("%d",&n)) { printf("%lld\n", ans[n]); } return 0; }
【】 6596 HDU
UNSOLVED
【】 6597 HDU
UNSOLVED
Game inequality
【】 6598 HDU
UNSOLVED
FIG flow network built +
【】 6599 HDU
Palindrome
UNSOLVED
【】 6600 HDU
UNSOLVED
【】 6601 HDU
SOLED
[Title] effect
Given a sequence of length n is an integer, and m times a given query, each valid interrogation interval can be an integer triangle consisting maximum length
[Thinking]
Basically bare Chairman tree, find the section's No. 1, the second largest, third largest, and then calculate the legitimacy, if not illegal, find the second largest, third largest, the fourth largest, and so on
Because the long side of the triangle is a legal case Fibonacci number, so the number will not find more than 44 times lower time
[Knowledge]: Chairman of the tree
#include<cstdio> #include<iostream> #include<algorithm> #define ll long long using namespace std; const int MAXN = 200010; const int MAXM = 200010; int lsan[MAXN], a[MAXN],T[MAXN]; int sum[21*MAXN], ls[21 * MAXN], rs[21 * MAXN]; int n, m; int cnt; int build(int l, int r) { int root=++cnt; sum[root] = 0; int mid = (l + r) >> 1; if (l < r) { ls[root] = build(l, mid); rs[root] = build(mid + 1, r); } return root; } int update(int pre, int l, int r,int x) { int root=++cnt; sum[root] = sum[pre] + 1; ls[root] = ls[pre]; rs[root] = rs[pre]; int mid = (l + r) >> 1; if (l < r) { if (x <= mid) ls[root] = update(ls[pre], l, mid, x); else rs[root] = update(rs[pre], mid + 1, r,x); } return root; } int query(int l,int r,int x, int y, int num) { if (l >= r) return l; int t = sum[rs[y]] - sum[rs[x]]; int mid = (l + r) >> 1; if (t>=num) return query(mid + 1, r, rs[x], rs[y], num); else return query(l, mid, ls[x], ls[y], num-t); } int main() { while (~scanf("%d%d", &n, &m)) { cnt = 0; for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); lsan[i] = a[i]; } sort(lsan + 1, lsan + 1 + n); int maxn = unique(lsan + 1, lsan + 1 + n) - lsan - 1; T[0] = build(1, maxn); for (int i = 1; i <= n; i++) { int t = lower_bound(lsan + 1, lsan + 1 + maxn, a[i]) - lsan; T[i] = update(T[i - 1], 1, maxn, t); } for (int i = 1; i <= m; i++) { int x, y, k; scanf("%d%d", &x, &y); int cal = 0; ll l1=0, l2=0, l3=0; cal = 0; while ((l1 + l2 <= l3 || l1 + l3 <= l2 ||l2 + l3 <= l1) &&cal+3<=y+1-x) { l1 = lsan[query(1, maxn, T[x - 1], T[y], ++cal)]; l2 = lsan[query(1, maxn, T[x - 1], T[y], ++cal)]; l3 = lsan[query(1, maxn, T[x - 1], T[y], ++cal)]; cal -= 2; } if (l1 + l2 > l3 && l1 + l3 > l2 &&l2 + l3 > l1) printf("%lld\n", l1 + l2 + l3); else printf("-1\n"); } } return 0; }
【】 6602 HDU
UNSOLVED
Segment tree
UNSOLVED