A
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<cstdlib>
#include<cmath>
#include<stack>
#include<map>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
#define ll long long
#define INF 0x3f3f3f3f
#define ull unsigned long long
#define endl '\n'
const double pi = acos(-1);
const int maxn = 3e5 + 10;
const int maxm = 2e7 + 10;
const ll mod = 20180623;
int n,ans;
int num[3][3];
int main(){
int x, y;
scanf("%d", &n);
for(int i = 1 ; i <= n ; ++ i){
scanf("%d %d", &x, &y);
num[x%3][y%3] ++;
}
for(int i = 1 ; i < (1 << 9) ; ++ i){
vector< pair<int, int> > vec;
int sum = 0;
for(int j = 0 ; j < 9 ; ++ j){
if((1 << j) & i){
sum += min(2, num[j/3][j%3]);
if(num[j/3][j%3]) vec.push_back(make_pair(j/3, j%3));
}
}
int flag = 0;
for(int i = 0 ; i < vec.size() ; ++ i){
for(int j = i + 1 ; j < vec.size() ; ++ j){
for(int k = j + 1 ; k < vec.size() ; ++ k){
int u = vec[i].first + vec[j].first + vec[k].first;
int v = vec[i].second + vec[j].second + vec[k].second;
if(u % 3 == 0 && v % 3 == 0){
flag = 1;
break;
}
}
}
}
if(!flag)
ans = max(ans, sum);
}
cout << ans;
return 0;
}
B
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<cstdlib>
#include<cmath>
#include<stack>
#include<map>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
#define ll long long
#define INF 0x3f3f3f3f
#define ull unsigned long long
#define endl '\n'
const double pi = acos(-1);
const int maxn = 2e7 + 10;
const int maxm = 2e7 + 10;
const ll mod = 998244353;
int n, m, cnt, ans;
int main(){
scanf("%d", &n);
for(int i = 1 ; i <= n ; ++ i){
scanf("%d", &m);
if(m & 1) cnt ++;
}
if(cnt & 1) cout << n;
else cout << "0";
return 0;
}
D
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<cstdlib>
#include<cmath>
#include<stack>
#include<map>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
#define ll long long
#define INF 0x3f3f3f3f
#define ull unsigned long long
#define endl '\n'
const double pi = acos(-1);
const int maxn = 2e7 + 10;
const int maxm = 2e7 + 10;
const ll mod = 998244353;
int n;
double ans;
struct node{
double cost, p;
bool operator< (const node& xgd) const{
return p * xgd.cost + cost > xgd.p * cost + xgd.cost;
}
};
int main(){
double x, y, tag = 1;
priority_queue<node> que;
scanf("%d", &n);
for(int i = 1 ; i <= n ; ++ i){
scanf("%lf %lf", &x, &y);
que.push(node{x, y});
}
while(!que.empty()){
node cur = que.top();
que.pop();
ans += cur.cost * tag;
//cout << ans <<endl;
tag *= cur.p;
//cout << tag <<endl;
}
printf("%.6lf", ans);
return 0;
}
E
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<cstdlib>
#include<cmath>
#include<stack>
#include<map>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
#define ll long long
#define INF 0x3f3f3f3f
#define ull unsigned long long
#define endl '\n'
const double pi = acos(-1);
const int maxn = 100 + 10;
const int maxm = 2e7 + 10;
const ll mod = 998244353;
int n, temp;
ll a[maxn];
char x[maxn], y[maxn];
void f(ll u, ll v){
if(u == 2){
/*if(v <= a[2])*/ cout << y[v] << endl;
/*else f(1, v-a[2]);*/
return;
}
else if(u == 1){
cout << x[v] << endl;
return;
}
if(v <= a[u-1]) f(u-1, v);
else f(u-2, v-a[u-1]);
}
int main(){
ll u, v;
scanf("%s%s", x+1, y+1);
a[1] = strlen(x+1);
a[2] = strlen(y+1);
for(int i = 3 ; ; ++ i){
a[i] = a[i-1] + a[i-2];
if(a[i-1] - 1e18 > - a[i-2]){
temp = i; break;
}
}
scanf("%d", &n);
while(n--){
scanf("%lld %lld", &u, &v);
if(u >= temp) u = temp;
f(u, v);
}
return 0;
}
F
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<cstdlib>
#include<cmath>
#include<stack>
#include<map>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
#define ll long long
#define INF 0x3f3f3f3f
#define ull unsigned long long
#define endl '\n'
const double pi = acos(-1);
const int maxn = 1e5 + 10;
const int maxm = 2e7 + 10;
const ll mod = 998244353;
int n, ans;
struct node{
double y, r, x;
}a[maxn];
bool cmp(node a, node b){
return a.x < b.x;
}
int main(){
scanf("%d", &n);
for(int i = 1 ; i <= n ; ++ i){
scanf("%lf %lf", &a[i].y, &a[i].r);
a[i].x = a[i].y - a[i].r;
}
sort(a + 1, a + 1 + n, cmp);
for(int i = 1 ; i <= n ; ++ i){
int l = i, r = n;
while(l <= r){
int mid = (l + r) >> 1;
if(a[mid].x > a[i].y + a[i].r){
r = mid - 1;
}
else l = mid + 1;
}
ans += (n - l + 1);
}
cout << ans;
return 0;
}
G
#include<bits/stdc++.h>
using namespace std;
#define maxn 500005
#define ll long long
int n;
int a[maxn],b[maxn];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
b[1]=a[1];
int len=1;
for(int i=2;i<=n;i++){
if(a[i]>b[len])b[++len]=a[i];
else{
int j=lower_bound(b+1,b+len+1,a[i])-b;
b[j]=a[i];
}
}
printf("%d\n",len);
return 0;
}
H
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<cstdlib>
#include<cmath>
#include<stack>
#include<map>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
#define ll long long
#define INF 0x3f3f3f3f
#define ull unsigned long long
#define endl '\n'
const double pi = acos(-1);
const int maxn = 200 + 10;
const int maxm = 5e3 + 10;
const ll mod = 998244353;
int n, k;
ll dp[maxn][maxm], a[maxn], ans;
int main(){
scanf("%d %d", &n, &k);
memset(dp, -1, sizeof(dp));
dp[0][0] = 0;
for(int i = 1 ; i <= n ; ++ i){
scanf("%lld", &a[i]);
int x = 0, y = 0;
while(a[i] % 2 == 0) a[i] /= 2, x ++;
while(a[i] % 5 == 0) a[i] /= 5, y ++;
for(int i = k ; i >= 1 ; -- i){
for(int j = 5000 ; j >= y ; -- j){
if(dp[i-1][j-y] != -1){
dp[i][j] = max(dp[i][j], dp[i-1][j-y] + x);
ans = max(ans, min(dp[k][j], (ll)j));
}
}
}
}
cout << ans;
return 0;
}
I
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<cstdlib>
#include<cmath>
#include<stack>
#include<map>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
#define ll long long
#define INF 0x3f3f3f3f
#define ull unsigned long long
#define endl '\n'
const double pi = acos(-1);
const int maxn = 2e7 + 10;
const int maxm = 2e7 + 10;
const ll mod = 998244353;
int n, m, cnt, ans=-1;
int a[maxn], b[maxn];
bool check(int mid){
int p = a[1] - mid, t = 0;
for(int i = 2 ; i <= n ; ++ i){
if(a[i] >= p)
t += (a[i]-p+b[i])/b[i];
}
return t <= mid;
}
int main(){
scanf("%d", &n);
for(int i = 1 ; i <= n ; ++ i){
scanf("%d", &a[i]);
}
for(int i = 2 ; i <= n ; ++ i){
scanf("%d", &b[i]);
}
int l = 0, r = a[1];
while(l <= r){
int mid = (l + r) >> 1;
if(check(mid)){
ans = mid;
//cout << ans << ' ' << l << ' ' << r << endl;
r = mid - 1;
}
else{
l = mid + 1;
//cout << ans << ' ' << l << ' ' << r << endl;
}
}
cout << ans;
return 0;
}
J
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<cstdlib>
#include<cmath>
#include<stack>
#include<map>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
#define ll long long
#define INF 0x3f3f3f3f
#define ull unsigned long long
#define endl '\n'
const double pi = acos(-1);
const int maxn = 1e6 + 10;
const int maxm = 5e3 + 10;
const ll mod = 1000000007;
int n, cnt;
ll ans;
ll xo[maxn], b[maxn], head[maxn], ct[maxn];
struct node{
int to, quan, next;
}edge[maxn << 1];
void add(int u, int v, int w){
edge[cnt].to = v;
edge[cnt].quan = w;
edge[cnt].next = head[u];
head[u] = cnt ++;
}
void dfs(int u, int pre){
for(int i = head[u] ; i != -1 ; i = edge[i].next){
int v = edge[i].to;
if(v != pre){
xo[v] = xo[u] ^ edge[i].quan;
dfs(v, u);
}
}
for(int i = 0 ; i < 31 ; ++ i) if(xo[u] & (1LL<<i)) ct[i+1] ++;
}
int main(){
int x, y;
scanf("%d", &n);
memset(head, -1, sizeof(head));
for(int i = 0 ; i < 31 ; ++ i) b[i+1] = (1LL<<i) % mod;
for(int i = 1 ; i < n ; ++ i){
scanf("%d %d", &x, &y);
add(i + 1, x, y); add(x, i + 1, y);
}
dfs(1, 0);
for(int i = 1 ; i <= 31 ; ++ i) ans = (ans + b[i] * ct[i] % mod * (n - ct[i]) % mod) % mod;
cout << 2 * ans % mod;
return 0;
}
L
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<cstdlib>
#include<cmath>
#include<stack>
#include<map>
#include<string>
#include<vector>
#include<set>
#include<algorithm>
using namespace std;
#define ll long long
#define INF 0x3f3f3f3f
#define ull unsigned long long
#define endl '\n'
const double pi = acos(-1);
const int maxn = 1e5 + 10;
const int maxm = 2e7 + 10;
const ll mod = 1e9+7;
int n;
int lst[maxn], mx[maxn << 2], lazy[maxn << 2], a[maxn], pos[maxn];
void pushup(int p){
mx[p] = max(mx[p << 1], mx[p << 1 | 1]); lazy[p] = 0; return;
}
void pushdown(int p){
if(lazy[p]){
lazy[p << 1] += lazy[p]; lazy[p << 1 | 1] += lazy[p];
mx[p << 1] += lazy[p]; mx[p << 1 | 1] += lazy[p];
lazy[p] = 0;
return;
}
}
void update(int p, int l, int r, int L, int R, int val){
if(l>R||r<L) return;
if(L <= l && r <= R){
lazy[p] += val;
mx[p] += val;
return;
}
pushdown(p);
int mid = (l + r) >> 1;
if(l <= mid) update(p << 1, l, mid, L, R, val);
if(r > mid) update(p << 1 | 1, mid + 1, r, L, R, val);
pushup(p);
}
int main(){
scanf("%d", &n);
for(int i = 1 ; i <= n ; ++ i){
scanf("%d", &a[i]);
if(pos[a[i]]) lst[i] = pos[a[i]];
pos[a[i]] = i;
}
int ans = 0;
for(int i = 1 ; i <= n ; ++ i){
update(1, 1, n, lst[i] + 1, i, 1);
if(lst[i]) update(1, 1, n, lst[lst[i]] + 1, lst[i], -1);
ans = max(ans, mx[1]);
}
cout << ans;
return 0;
}