atcoder abc 409 A~G
A
点击查看代码
#include <bits/stdc++.h>
using namespace std;
string s,t;
int main(){
int n,i;
cin>>n>>s>>t;
for(i=0;i<n;i++)
{
if(s[i]=='o'&&t[i]=='o')
{
cout<<"Yes\n";
return 0;
}
}
cout<<"No\n";
return 0;
}
点击查看代码
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/hash_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#define N 1000010
#define int long long
#define i128 __int128
#define ull unsigned long long
#define db long double
#define pii pair<int,int>
#define st first
#define ed second
#define mkp make_pair
#define pb push_back
#define eps 1e-9
#define mod 998244353
#define mod2 1000000007
#define bs 13131
#define bs2 131
#define INF 0x3f3f3f3f3f3f3f3f
#define il inline
#define vi vector<int>
#define ins insert
#define umap unordered_map
#define uset unordered_set
#define R(x) x.begin(),x.end()
#define B(x) x.begin()
#define E(x) x.end()
#define lb lower_bound
#define ub upper_bound
#define prq priority_queue
#define rd(l,r) (rnd()%(r-l+1)+l)
#define lowbit(x) ((x)&(-(x)))
mt19937_64 rnd(chrono::system_clock::now().time_since_epoch().count());
il int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
int T=1,n,m,q,k;
int s[N];
char c[N];
vector<int> v[N];
il void solve(){
n=read();
}
signed main(){
n=read();
for(int i=1;i<=n;i++)s[i]=read();
int l=0,r=INF,ans=0;
while(l<=r){
int mid=(l+r)>>1;
int cnt=0;
for(int i=1;i<=n;i++)if(s[i]>=mid)cnt++;
if(cnt>=mid)ans=mid,l=mid+1;
else r=mid-1;
}
printf("%lld",ans);
return 0;
}
#include<bits/stdc++.h>
using namespace std;
#define int long long
int d[1000005];
signed main() {
int N,L;
cin>>N>>L;
int a=L;
L*=3;
int dis=0;
d[0]++;
for(int i=1;i<=N-1;i++) {
int x;
cin>>x;
dis+=x*3;
dis%=L;
d[dis]++;
}
int sum=0;
for(int i=0;i<a;i++) {
sum+=d[i]*d[i+a]*d[i+2*a];
}
cout<<sum;
return 0;
}
D点击查看代码
#pragma GCC optimize("O3,unroll-loops")
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MOD = 1e9 + 7; // 998244353;
const int MX = 2e5 + 5, INF = 1e9;
const ll INFLL = 1e18;
#define F first
#define S second
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define pb push_back
#define FOR(i, a, b) for (int i = (a); i < (b); ++i)
#define FORE(i, a, b) for (int i = (a); i <= (b); ++i)
#define ROF(i, a, b) for (int i = (a); i >= (b); --i)
#define trav(a, x) for (auto& a : x)
#define sz(x) (int)x.size()
#define make_unique(v) \
sort(all(v)); \
v.erase(unique(all(v)), v.end())
template <class T>
using minpq = priority_queue<T, vector<T>, greater<T>>;
template <class T>
int lwb(const vector<T>& a, const T& b) {
return int(lower_bound(all(a), b) - a.begin());
}
template <class T>
int upb(const vector<T>& a, const T& b) {
return int(upper_bound(all(a), b) - a.begin());
}
template <class T>
bool ckmin(T& a, const T& b) {
return b < a ? a = b, 1 : 0;
}
template <class T>
bool ckmax(T& a, const T& b) {
return a < b ? a = b, 1 : 0;
}
template <int D, typename T>
struct vt : public vector<vt<D - 1, T>> {
template <typename... Args>
vt(int n = 0, Args... args)
: vector<vt<D - 1, T>>(n, vt<D - 1, T>(args...)) {}
};
template <typename T>
struct vt<1, T> : public vector<T> {
vt(int n = 0, const T& val = T()) : vector<T>(n, val) {}
};
template <typename T>
istream& operator>>(istream& in, vector<T>& a) {
for (auto& x : a) in >> x;
return in;
};
template <typename T>
ostream& operator<<(ostream& out, vector<T>& a) {
for (auto& x : a) out << x << ' ';
return out;
};
void solve() {
int N; cin >> N;
string S; cin >> S;
ll l = -1;
FOR(i,0,N-1){
if (S[i] > S[i+1]) {
l = i; break;
}
}
if (l == -1) {
cout << S << endl;
return;
}
char U = S[l];
ll j = l + 1;
while (j < N && S[j] <= U){
j++;
}
ll r = (j < N? j-1 : N-1);
string T; T.reserve(N);
T.append(S,0,l);
T.append(S,l+1,r-l);
T.pb(U);
if (r + 1 < N){
T.append(S,r+1,N-(r+1));
}
cout << T << endl;
}
signed main() {
cin.tie(0)->sync_with_stdio(0);
int t = 1;
cin >> t;
for (int test = 1; test <= t; test++) {
solve();
}
}
点击查看代码
#pragma GCC optimize("O3,unroll-loops")
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MOD = 1e9 + 7; // 998244353;
const int MX = 2e5 + 5, INF = 1e9;
const ll INFLL = 1e18;
#define F first
#define S second
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define pb push_back
#define FOR(i, a, b) for (int i = (a); i < (b); ++i)
#define FORE(i, a, b) for (int i = (a); i <= (b); ++i)
#define ROF(i, a, b) for (int i = (a); i >= (b); --i)
#define trav(a, x) for (auto& a : x)
#define sz(x) (int)x.size()
#define make_unique(v) \
sort(all(v)); \
v.erase(unique(all(v)), v.end())
template <class T>
using minpq = priority_queue<T, vector<T>, greater<T>>;
template <class T>
int lwb(const vector<T>& a, const T& b) {
return int(lower_bound(all(a), b) - a.begin());
}
template <class T>
int upb(const vector<T>& a, const T& b) {
return int(upper_bound(all(a), b) - a.begin());
}
template <class T>
bool ckmin(T& a, const T& b) {
return b < a ? a = b, 1 : 0;
}
template <class T>
bool ckmax(T& a, const T& b) {
return a < b ? a = b, 1 : 0;
}
template <int D, typename T>
struct vt : public vector<vt<D - 1, T>> {
template <typename... Args>
vt(int n = 0, Args... args)
: vector<vt<D - 1, T>>(n, vt<D - 1, T>(args...)) {}
};
template <typename T>
struct vt<1, T> : public vector<T> {
vt(int n = 0, const T& val = T()) : vector<T>(n, val) {}
};
template <typename T>
istream& operator>>(istream& in, vector<T>& a) {
for (auto& x : a) in >> x;
return in;
};
template <typename T>
ostream& operator<<(ostream& out, vector<T>& a) {
for (auto& x : a) out << x << ' ';
return out;
};
void solve() {
int N; cin >> N;
vt<1,ll> net(N+1);
FORE(i,1,N){
cin >> net[i];
}
vector<vector<pair<ll,ll>>> adj(N+1);
FORE(i,1,N-1){
ll u,v,w; cin >> u >> v >> w;
adj[u].emplace_back(v,w);
adj[v].emplace_back(u,w);
}
vector<int> parent(N+1, 0);
vector<ll> edge_w(N+1, 0);
vector<int> st1;
st1.reserve(N);
vector<int> st2;
st2.reserve(N);
parent[1] = 0;
st1.push_back(1);
while (!st1.empty()) {
int u = st1.back();
st1.pop_back();
st2.push_back(u);
for (auto &pr : adj[u]) {
int v = pr.first;
int w = pr.second;
if (v == parent[u]) continue;
parent[v] = u;
edge_w[v] = w;
st1.push_back(v);
}
}
ll answer = 0;
for (int idx = int(st2.size()) - 1; idx >= 0; --idx) {
int u = st2[idx];
if (u == 1) continue;
answer += llabs(net[u]) * edge_w[u];
net[parent[u]] += net[u];
}
cout << answer << "\n";
}
signed main() {
cin.tie(0)->sync_with_stdio(0);
int t = 1;
// cin >> t;
for (int test = 1; test <= t; test++) {
solve();
}
}
点击查看代码
#pragma GCC optimize("O3,unroll-loops")
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MOD = 1e9 + 7; // 998244353;
const int MX = 2e5 + 5, INF = 1e9;
const ll INFLL = 1e18;
#define F first
#define S second
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define pb push_back
#define FOR(i, a, b) for (int i = (a); i < (b); ++i)
#define FORE(i, a, b) for (int i = (a); i <= (b); ++i)
#define ROF(i, a, b) for (int i = (a); i >= (b); --i)
#define trav(a, x) for (auto& a : x)
#define sz(x) (int)x.size()
#define make_unique(v) \
sort(all(v)); \
v.erase(unique(all(v)), v.end())
template <class T>
using minpq = priority_queue<T, vector<T>, greater<T>>;
template <class T>
int lwb(const vector<T>& a, const T& b) {
return int(lower_bound(all(a), b) - a.begin());
}
template <class T>
int upb(const vector<T>& a, const T& b) {
return int(upper_bound(all(a), b) - a.begin());
}
template <class T>
bool ckmin(T& a, const T& b) {
return b < a ? a = b, 1 : 0;
}
template <class T>
bool ckmax(T& a, const T& b) {
return a < b ? a = b, 1 : 0;
}
template <int D, typename T>
struct vt : public vector<vt<D - 1, T>> {
template <typename... Args>
vt(int n = 0, Args... args)
: vector<vt<D - 1, T>>(n, vt<D - 1, T>(args...)) {}
};
template <typename T>
struct vt<1, T> : public vector<T> {
vt(int n = 0, const T& val = T()) : vector<T>(n, val) {}
};
template <typename T>
istream& operator>>(istream& in, vector<T>& a) {
for (auto& x : a) in >> x;
return in;
};
template <typename T>
ostream& operator<<(ostream& out, vector<T>& a) {
for (auto& x : a) out << x << ' ';
return out;
};
struct DSU {
vector<int> p, r;
int comp_count;
DSU(int n = 0) {
p.resize(n+1);
r.assign(n+1, 1);
iota(p.begin(), p.end(), 0);
comp_count = n;
}
int find(int x) {
return p[x] == x ? x : p[x] = find(p[x]);
}
bool unite(int a, int b) {
a = find(a);
b = find(b);
if (a == b) return false;
if (r[a] < r[b]) swap(a, b);
p[b] = a;
r[a] += r[b];
--comp_count;
return true;
}
};
void solve() {
int N, Q;
cin >> N >> Q;
int maxVertices = N + Q;
vt<1,ll> X(maxVertices + 1), Y(maxVertices + 1);
FORE(i,1,N) {
cin >> X[i] >> Y[i];
}
size_t reserve_edges = size_t(maxVertices) * (maxVertices - 1) / 2;
vector<tuple<int,int,int>> initialEdges;
initialEdges.reserve(reserve_edges);
for (int u = 1; u <= N; u++) {
for (int v = u + 1; v <= N; v++) {
int w = int(llabs(X[u] - X[v]) + llabs(Y[u] - Y[v]));
initialEdges.emplace_back(w, u, v);
}
}
priority_queue<
tuple<int,int,int>,
vector<tuple<int,int,int>>,
greater<tuple<int,int,int>>
> pq(greater<tuple<int,int,int>>(), std::move(initialEdges));
DSU dsu(maxVertices);
dsu.comp_count = N;
int curr_n = N;
while (Q--) {
int type;
cin >> type;
if (type == 1) {
// Add a new vertex
long long a, b;
cin >> a >> b;
++curr_n;
X[curr_n] = a;
Y[curr_n] = b;
dsu.comp_count++;
for (int u = 1; u < curr_n; u++) {
int w = int(llabs(X[u] - X[curr_n]) + llabs(Y[u] - Y[curr_n]));
pq.emplace(w, u, curr_n);
}
}
else if (type == 2) {
if (dsu.comp_count <= 1) {
cout << -1 << "\n";
} else {
int k;
int u, v;
while (true) {
if (pq.empty()) {
k = -1;
break;
}
tie(k, u, v) = pq.top();
pq.pop();
if (dsu.find(u) != dsu.find(v)) {
break;
}
}
if (k < 0) {
cout << -1 << "\n";
} else {
dsu.unite(u, v);
while (!pq.empty() && get<0>(pq.top()) == k) {
tie(std::ignore, u, v) = pq.top();
pq.pop();
dsu.unite(u, v);
}
cout << k << "\n";
}
}
}
else if (type == 3) {
int u, v;
cin >> u >> v;
cout << (dsu.find(u) == dsu.find(v) ? "Yes\n" : "No\n");
}
}
}
signed main() {
cin.tie(0)->sync_with_stdio(0);
int t = 1;
// cin >> t;
for (int test = 1; test <= t; test++) {
solve();
}
}
点击查看代码
#pragma GCC optimize("O3,unroll-loops")
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MOD = 998244353;
const int MX = 2e5 + 5, INF = 1e9;
const ll INFLL = 1e18;
#define F first
#define S second
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define pb push_back
#define FOR(i, a, b) for (int i = (a); i < (b); ++i)
#define FORE(i, a, b) for (int i = (a); i <= (b); ++i)
#define ROF(i, a, b) for (int i = (a); i >= (b); --i)
#define trav(a, x) for (auto& a : x)
#define sz(x) (int)x.size()
#define make_unique(v) \
sort(all(v)); \
v.erase(unique(all(v)), v.end())
template <class T>
using minpq = priority_queue<T, vector<T>, greater<T>>;
template <class T>
int lwb(const vector<T>& a, const T& b) {
return int(lower_bound(all(a), b) - a.begin());
}
template <class T>
int upb(const vector<T>& a, const T& b) {
return int(upper_bound(all(a), b) - a.begin());
}
template <class T>
bool ckmin(T& a, const T& b) {
return b < a ? a = b, 1 : 0;
}
template <class T>
bool ckmax(T& a, const T& b) {
return a < b ? a = b, 1 : 0;
}
template <int D, typename T>
struct vt : public vector<vt<D - 1, T>> {
template <typename... Args>
vt(int n = 0, Args... args)
: vector<vt<D - 1, T>>(n, vt<D - 1, T>(args...)) {}
};
template <typename T>
struct vt<1, T> : public vector<T> {
vt(int n = 0, const T& val = T()) : vector<T>(n, val) {}
};
template <typename T>
istream& operator>>(istream& in, vector<T>& a) {
for (auto& x : a) in >> x;
return in;
};
template <typename T>
ostream& operator<<(ostream& out, vector<T>& a) {
for (auto& x : a) out << x << ' ';
return out;
};
static const int G = 3;
int modexp(int a, int e=MOD-2) {
long long res=1, base=a;
while(e>0){
if(e&1) res=res*base%MOD;
base=base*base%MOD;
e>>=1;
}
return int(res);
}
void ntt(vector<int> & a, bool invert) {
int n = a.size();
static vector<int> rev;
static vector<int> roots{0,1};
if ((int)rev.size() != n) {
int k = __builtin_ctz(n);
rev.assign(n,0);
for(int i=0;i<n;i++)
rev[i] = (rev[i>>1]>>1) | ((i&1)<<(k-1));
}
for(int i=0;i<n;i++){
if (i<rev[i]) swap(a[i],a[rev[i]]);
}
if ((int)roots.size() < n) {
// compute roots up to size n
int k = __builtin_ctz(roots.size());
roots.resize(n);
while ((1<<k) < n) {
int e = modexp(G, (MOD-1)>>(k+1));
for(int i=1<<(k-1); i<(1<<k); i++){
roots[2*i] = roots[i];
roots[2*i+1] = int((long long)roots[i]*e % MOD);
}
k++;
}
}
for (int len=1; len<n; len<<=1) {
for (int i=0; i<n; i+=2*len) {
for (int j=0; j<len; j++){
int u = a[i+j];
int v = int((long long)a[i+j+len] * roots[len+j] % MOD);
a[i+j] = u+v<MOD ? u+v : u+v-MOD;
a[i+j+len] = u-v>=0 ? u-v : u-v+MOD;
}
}
}
if(invert) {
reverse(a.begin()+1, a.end());
int inv_n = modexp(n, MOD-2);
for (int &x : a)
x = int((long long)x * inv_n % MOD);
}
}
vector<int> convolution(const vector<int>& A, const vector<int>& B) {
int n = 1, tot = (int)A.size() + (int)B.size() - 1;
while (n < tot) n <<= 1;
vector<int> a(A.begin(), A.end()), b(B.begin(), B.end());
a.resize(n); b.resize(n);
ntt(a, false);
ntt(b, false);
for(int i=0;i<n;i++)
a[i] = int((long long)a[i] * b[i] % MOD);
ntt(a, true);
a.resize(tot);
return a;
}
void solve() {
int N, P;
cin >> N >> P;
if (P == 0) {
cout << N << "\n";
for (int k = 2; k <= N; k++)
cout << 0 << "\n";
return ;
}
if (P == 100) {
for(int k=1;k<=N;k++)
cout << 1 << "\n";
return ;
}
int inv100 = modexp(100);
int p = int((long long)P * inv100 % MOD);
int c = (1 - p + MOD) % MOD; // 1-p
vector<int> inv(N+1), fact(N+1), invfact(N+1);
inv[1] = 1;
for(int i=2; i<=N; i++)
inv[i] = int((long long)(MOD - MOD/i) * inv[MOD % i] % MOD);
fact[0]=1;
for(int i=1;i<=N;i++)
fact[i] = int((long long)fact[i-1]*i % MOD);
invfact[N] = modexp(fact[N]);
for(int i=N;i>0;i--)
invfact[i-1] = int((long long)invfact[i]*i % MOD);
vector<int> g(N+2);
g[N] = 1;
for(int s=N-1; s>=1; s--) {
int num = ( (s+1) - (long long)p + MOD ) % MOD;
g[s] = int((long long)g[s+1] * num % MOD * inv[s] % MOD);
}
int n0 = N-2;
vector<int> d(n0+1);
long long cpow = 1;
for(int j=0;j<=n0;j++){
d[j] = int(cpow * g[j+2] % MOD);
cpow = cpow * c % MOD;
}
vector<int> A1(n0+1), A2(n0+1);
for(int i=0;i<=n0;i++){
A1[i] = int( (long long)d[n0 - i] * fact[n0 - i] % MOD );
A2[i] = invfact[i];
}
auto C = convolution(A1, A2);
vector<int> h(n0+1);
for(int r=0;r<=n0;r++){
h[r] = int((long long)C[n0 - r] * invfact[r] % MOD);
}
vector<int> ans(N+1);
ans[1] = g[1];
vector<int> p_pows(n0+1), icpows(n0+1);
p_pows[0] = p;
for(int r=1;r<=n0;r++)
p_pows[r] = int((long long)p_pows[r-1] * p % MOD);
int invc = modexp(c);
icpows[0] = 1;
for(int r=1;r<=n0;r++)
icpows[r] = int((long long)icpows[r-1] * invc % MOD);
for(int k=2; k<=N; k++){
int r = k-2;
long long v = h[r];
v = v * p_pows[r] % MOD;
v = v * icpows[r] % MOD;
ans[k] = int(v);
}
for(int k=1;k<=N;k++){
cout << ans[k] << "\n";
}
}
signed main() {
cin.tie(0)->sync_with_stdio(0);
int t = 1;
// cin >> t;
for (int test = 1; test <= t; test++) {
solve();
}
}
浙公网安备 33010602011771号