messenger
discord
同分時的比序條件(tie breaker) 如下:
void debug(){
cout<<"\n";
}
template<class T,class ...U>
void debug(T a,U ...b){
cout<<a<<" ",debug(b...);
}
int main(){
debug("hello","world",5)
}
void debug(){
cout<<"\n";
}
template<class T,class ...U>
void debug(T a,U ...b){
cout<<a<<" ",debug(b...);
}
int main(){
debug("hello","world",5)
}
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx,popcnt,sse4,abm")
#include<bits/stdc++.h>
#define int long long
#define quick ios::sync_with_stdio(0);cin.tie(0);
#define rep(x,a,b) for(int x=a;x<=b;x++)
#define repd(x,a,b) for(int x=a;x>=b;x--)
#define lowbit(x) (x&-x)
#define sz(x) (int)(x.size())
#define F first
#define S second
#define all(x) x.begin(),x.end()
#define mp make_pair
#define eb emplace_back
using namespace std;
typedef pair<int,int> pii;
void debug(){
cout<<"\n";
}
template <class T,class ... U >
void debug(T a, U ... b){
cout<<a<<" ",debug(b...);
}
const int N=1e6+7;
const int INF=1e18;
signed main(){
quick
}void solve(int n){
int mx=-INF,mn=INF;
for(int i=1;i<=n;i++) mx=max(mx,a[i]),mn=min(mn,a[i]);
int ansl=-INF,ansr=INF;
int lmn=-INF,lmx=-INF;
for(int i=1;i<=n;i++){
if(a[i]==mx&&ansr-ansl>i-lmn){
ansl=lmn;
ansr=i;
lmx=i;
}
else if(a[i]==mn&&ansr-ansl>i-lmx){
ansl=lmx;
ansr=i;
lmn=i;
}
}
}給字串 \(S,T\) 要判斷可不可以把字串 \(S\) 切成 \(|T|\) 塊,且第 \(i\) 塊內的字元都相同且 \(=T_i\)
#include<bits/stdc++.h>
#define int long long
#define quick ios::sync_with_stdio(0);cin.tie(0);
#define rep(x,a,b) for(int x=a;x<=b;x++)
#define repd(x,a,b) for(int x=a;x>=b;x--)
#define lowbit(x) (x&-x)
#define sz(x) (int)(x.size())
#define F first
#define S second
#define all(x) x.begin(),x.end()
#define mp make_pair
#define eb emplace_back
using namespace std;
typedef pair<int,int> pii;
void debug(){
cout<<"\n";
}
const int N=2e6+7;
const int INF=1e18;
int cnt[26];
vector<pair<char,int> > get(string s){
vector<pair<char,int> > v;
rep(i,0,sz(s)-1){
int l=1;
while(i+l<sz(s)&&s[i+l]==s[i]) l++;
v.eb(mp(s[i],l));
i=i+l-1;
}
return v;
}
signed main(){
quick
int n,m;
cin>>n>>m;
string s,t;
cin>>s>>t;
vector<pair<char,int>> v1,v2;
v1=get(s);v2=get(t);
if(sz(v1)!=sz(v2)) {
cout<<"No\n";
return 0;
}
rep(i,0,sz(v1)-1){
if(v1[i].F!=v2[i].F||v1[i].S<v2[i].S){
cout<<"No\n";
return 0;
}
}
cout<<"Yes\n";
}
收起
Echo.cpp
2 KB
#include<bits/stdc++.h>
#define int long long
#define quick ios::sync_with_stdio(0);cin.tie(0);
#define rep(x,a,b) for(int x=a;x<=b;x++)
#define repd(x,a,b) for(int x=a;x>=b;x--)
#define lowbit(x) (x&-x)
#define sz(x) (int)(x.size())
#define F first
#define S second
#define all(x) x.begin(),x.end()
#define mp make_pair
#define eb emplace_back
using namespace std;
typedef pair<int,int> pii;
void debug(){
cout<<"\n";
}
template<class T,class ...U>
void debug(T a,U ...b){
cout<<a<<" ",debug(b...);
}
const int N=2e6+7;
const int INF=1e18;
int dis[N];
int dis2[N];
vector<pii> v[N];
vector<pii> v2[N];
tuple<int,int,int> e[N];
signed main(){
quick
int n,m;
cin>>n>>m;
rep(i,1,m) {
int a,b,w;
cin>>a>>b>>w;
e[i]=make_tuple(a,b,w);
v[a].eb(b,w);
v2[b].eb(a,w);
}
fill(dis+2,dis+n+1,INF);
priority_queue<pii,vector<pii>,greater<pii> > pq;
pq.push(mp(0,1));
while(sz(pq)){
pii now=pq.top();
pq.pop();
if(dis[now.S]<now.F) continue;
for(auto [i,w]:v[now.S]){
if(dis[i]>dis[now.S]+w){
dis[i]=dis[now.S]+w;
pq.push(mp(dis[i],i));
}
}
}
fill(dis2+1,dis2+n,INF);
pq.push(mp(0,n));
while(sz(pq)){
pii now=pq.top();
pq.pop();
if(dis2[now.S]<now.F) continue;
for(auto [i,w]:v2[now.S]){
if(dis2[i]>dis2[now.S]+w){
dis2[i]=dis2[now.S]+w;
pq.push(mp(dis2[i],i));
}
}
}
rep(i,1,m){
auto [a,b,w]=e[i];
if(dis[a]+w+dis2[b]==dis[n]){
cout<<'1';
}
else cout<<'0';
}cout<<"\n";
}
int l=0;
while(sz(dq)&&dq.front().F-l-1<k){
k-=(dq.front().F-l-1);
l=dq.front().F+dq.front().S-1;
dq.pop_front();
}
cout<<l+k<<"\n";
dq.push_front(mp(1,l+k));k=-k;
int l=0;
while(sz(dq)&&dq.front().S<=k) {
l=dq.front().F+dq.front().S-1;
k-=dq.front().S;
dq.pop_front();
}
if(k) dq[0].F+=k,dq[0].S-=k,cout<<dq[0].F-1<<"\n";
else cout<<l<<"\n";#include<bits/stdc++.h>
#define int long long
#define quick ios::sync_with_stdio(0);cin.tie(0);
#define rep(x,a,b) for(int x=a;x<=b;x++)
#define repd(x,a,b) for(int x=a;x>=b;x--)
#define lowbit(x) (x&-x)
#define sz(x) (int)(x.size())
#define F first
#define S second
#define all(x) x.begin(),x.end()
#define mp make_pair
#define eb emplace_back
using namespace std;
typedef pair<int,int> pii;
void debug(){
cout<<"\n";
}
template<class T,class ...U>
void debug(T a,U ...b){
cout<<a<<" ",debug(b...);
}
const int N=2e6+7;
const int INF=1e18;
signed main(){
quick
deque<pii> dq;
int n,m;
cin>>n>>m;
int ls,rs;
ls=rs=0;
rep(i,1,m){
char ci;
int k;
cin>>ci>>k;
if(ci=='l'){
if(k>=0){
int l=0;
while(sz(dq)&&dq.front().F-l-1<k){
k-=(dq.front().F-l-1);
l=dq.front().F+dq.front().S-1;
dq.pop_front();
}
cout<<l+k<<"\n";
dq.push_front(mp(1,l+k));
}
else{
k=-k;
int l=0;
while(sz(dq)&&dq.front().S<=k) {
l=dq.front().F+dq.front().S-1;
k-=dq.front().S;
dq.pop_front();
}
if(k) dq[0].F+=k,dq[0].S-=k,cout<<dq[0].F-1<<"\n";
else cout<<l<<"\n";
}
}
else{
if(k>=0){
int Lft;
int l=n+1;
while(sz(dq)&&l-(dq.back().F+dq.back().S-1)-1<k){
k-=l-(dq.back().F+dq.back().S-1)-1;
l=dq.back().F;
dq.pop_back();
}
cout<<l-k<<"\n";
dq.push_back(mp(l-k,n-(l-k)+1));
}
else{
k=-k;
int l=0;
while(sz(dq)&&dq.back().S<=k) {
l=dq.back().F;
k-=dq.back().S;
dq.pop_back();
}
if(k) dq[sz(dq)-1].S-=k,cout<<dq.back().F+dq.back().S<<"\n";
else cout<<l<<"\n";
}
}
}
}#include<bits/stdc++.h>
#define int long long
#define quick ios::sync_with_stdio(0);cin.tie(0);
#define rep(x,a,b) for(int x=a;x<=b;x++)
#define repd(x,a,b) for(int x=a;x>=b;x--)
#define lowbit(x) (x&-x)
#define sz(x) (int)(x.size())
#define F first
#define S second
#define all(x) x.begin(),x.end()
#define mp make_pair
#define eb emplace_back
using namespace std;
typedef pair<int,int> pii;
void debug(){
cout<<"\n";
}
template<class T,class ...U>
void debug(T a,U ...b){
cout<<a<<" ",debug(b...);
}
const int N=2e6+7;
const int INF=1e18;
int dis[N];
int dis2[N];
vector<pii> v[N];
vector<pii> v2[N];
tuple<int,int,int> e[N];
signed main(){
quick
int n,m;
cin>>n>>m;
rep(i,1,m) {
int a,b,w;
cin>>a>>b>>w;
e[i]=make_tuple(a,b,w);
v[a].eb(b,w);
v2[b].eb(a,w);
}
fill(dis+2,dis+n+1,INF);
priority_queue<pii,vector<pii>,greater<pii> > pq;
pq.push(mp(0,1));
while(sz(pq)){
pii now=pq.top();
pq.pop();
if(dis[now.S]<now.F) continue;
for(auto [i,w]:v[now.S]){
if(dis[i]>dis[now.S]+w){
dis[i]=dis[now.S]+w;
pq.push(mp(dis[i],i));
}
}
}
fill(dis2+1,dis2+n,INF);
pq.push(mp(0,n));
while(sz(pq)){
pii now=pq.top();
pq.pop();
if(dis2[now.S]<now.F) continue;
for(auto [i,w]:v2[now.S]){
if(dis2[i]>dis2[now.S]+w){
dis2[i]=dis2[now.S]+w;
pq.push(mp(dis2[i],i));
}
}
}
rep(i,1,m){
auto [a,b,w]=e[i];
if(dis[a]+w+dis2[b]==dis[n]){
cout<<'1';
}
else cout<<'0';
}cout<<"\n";
}#include<bits/stdc++.h>
#define int long long
#define quick ios::sync_with_stdio(0);cin.tie(0);
#define rep(x,a,b) for(int x=a;x<=b;x++)
#define repd(x,a,b) for(int x=a;x>=b;x--)
#define lowbit(x) (x&-x)
#define sz(x) (int)(x.size())
#define F first
#define S second
#define all(x) x.begin(),x.end()
#define mp make_pair
#define eb emplace_back
using namespace std;
typedef pair<int,int> pii;
void debug(){
cout<<"\n";
}
template<class T,class ...U>
void debug(T a,U ...b){
cout<<a<<" ",debug(b...);
}
const int N=2e6+7;
const int INF=1e18;
int r[N],c[N],d[N];
int d2[N];
int d3[N];
vector<pii> v[N];
vector<vector<int> > dp[N];
signed main(){
quick
int n,m,k;
cin>>n>>m>>k;
vector<int> vx;
rep(i,1,k){
cin>>r[i]>>c[i]>>d[i];
vx.eb(c[i]);
}
sort(all(vx));
vx.erase(unique(all(vx)),vx.end());
rep(i,1,k){
c[i]=lower_bound(all(vx),c[i])-vx.begin();
v[c[i]].eb(mp(r[i],d[i]));
}
rep(i,0,sz(vx)-1){
dp[i].assign(sz(v[i]),vector<int>(2));
sort(all(v[i]));
vector<int> pref(sz(v[i]));
rep(j,0,sz(v[i])-1){
pref[j]=v[i][j].S;
if(j) pref[j]+=pref[j-1];
}
//debug(i);
//for(pii p2:v[i]) cout<<p2.F<<" "<<p2.S<<"\n";cout<<"\n";
int mn=INF;
for(pii p:v[i]) mn=min(mn,p.S);
int l=sz(v[i]);
if(!i||vx[i]-vx[i-1]>1){
int Sx=0;
if(i){
Sx=INF;
rep(j,0,sz(v[i-1])-1){
Sx=min(Sx,min({dp[i-1][j][0],dp[i-1][j][1],d2[i-1],d3[i-1]}));
}
}
d2[i]=Sx;
d3[i]=Sx+pref.back();
rep(j,0,sz(v[i])-1){
dp[i][j][0]=pref[l-1]-pref[j]+Sx;
dp[i][j][1]=(j>0?pref[j-1]:0LL)+Sx;
}
if(sz(v[i])==n){
d2[i]+=mn;
}
}
else{
int l0=sz(v[i-1]);
vector<int> idx(l0);
vector<int> prefmn(l0);
vector<int> suffmn(l0);
rep(j,0,l0-1){
idx[j]=v[i-1][j].F;
prefmn[j]=dp[i-1][j][0];
if(j) prefmn[j]=min(prefmn[j],prefmn[j-1]);
}
repd(j,l0-1,0){
suffmn[j]=dp[i-1][j][1];
if(j+1<l0) suffmn[j]=min(suffmn[j],suffmn[j+1]);
}
rep(j,0,sz(v[i])-1){
dp[i][j][0]=dp[i][j][1]=d3[i-1];
int p=upper_bound(all(idx),v[i][j].F+1)-idx.begin();
if(p<l0) dp[i][j][0]=min(dp[i][j][0],suffmn[p]);
dp[i][j][0]+=pref.back()-pref[j];
p=lower_bound(all(idx),v[i][j].F-1)-idx.begin()-1;
if(p>=0) dp[i][j][1]=min(dp[i][j][1],prefmn[p]);
//if(i==4) debug("lower",prefmn[p]);
dp[i][j][1]+=(j>0?pref[j-1]:0);;
}
d2[i]=d3[i-1]+((sz(v[i])==n)?mn:0);
d3[i]=min(d3[i-1],d2[i-1])+pref.back();
rep(j,0,l0-1) d3[i]=min(d3[i],min(dp[i-1][j][0],dp[i-1][j][1])+pref.back());
}
//debug(dp[i][0][0],dp[i][0][1],d2[i],d3[i]);
//if(i>=3) return 0;
}
int L=sz(vx);
int ans=min(d2[L-1],d3[L-1]);
rep(j,0,sz(v[L-1])-1){
ans=min(ans,min(dp[L-1][j][0],dp[L-1][j][1]));
}
cout<<ans<<"\n";
}
/*
0 -> 上
1 -> 下
2 -> 上+下
3 -> 都不放
dp[i][j][0]=min(min(dp[i-1][j'][1],dp[i-1][j'][3]) ) +Cost(i,j+1~n)) for j'>j+1
dp[i][j][1]=min(min(dp[i-1][j'][0],dp[i-1][j'][3]))+Cost(i,1~j-1)) for j' < j-1
dp[i][j][2]=dp[i-1][j][3]
dp[i][j][0]=min(dp[i-1][j][0],dp[i-1][j][1],dp[i-1][j][2],dp[i-1][j][3]);
*/#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx,popcnt,sse4,abm")
#include<bits/stdc++.h>
//#define int long long
#define quick ios::sync_with_stdio(0);cin.tie(0);
#define rep(x,a,b) for(int x=a;x<=b;x++)
#define repd(x,a,b) for(int x=a;x>=b;x--)
#define lowbit(x) (x&-x)
#define sz(x) (int)(x.size())
#define F first
#define S second
#define all(x) x.begin(),x.end()
#define mp make_pair
#define eb emplace_back
using namespace std;
typedef pair<int,int> pii;
void debug(){
cout<<"\n";
}
template<class T,class ...U>
void debug(T a,U ...b){
cout<<a<<" ",debug(b...);
}
const int N=2e6+7;
vector<int> c[N];
int p[N];
vector<int> qry[N];
int ans[N];
int px[N];
int fp(int x){
if(x!=px[x]) px[x]=fp(px[x]);
return px[x];
}
int group;
int n,q;
void Union(int a,int b,int t){
int a0=a,b0=b;
a=fp(a);b=fp(b);
if(a==b) {return ;}//debug(a0,b0,t,"T same");return ;}
if(sz(qry[a])<sz(qry[b])) swap(a,b);
px[b]=a;
group--;
//debug("Union",a0,b0);
for(int i:qry[b]){
if(ans[i]) continue;
if(fp(i+n)==fp(i+n+q)){
ans[i]=t;
}
else qry[a].eb(i);
}
qry[b].clear();
}
signed main(){
quick
int m;
cin>>n>>m;
assert(n<N&&m<N);
group=n;
rep(i,1,n) px[i]=i;
vector<pii> v;
rep(i,1,m){
int k;
cin>>p[i]>>k;
v.eb(mp(p[i],i));
c[i].resize(k);
rep(j,0,k-1){
cin>>c[i][j];
}
}
cin>>q;
rep(i,1,q){
int a,b;
cin>>a>>b;
qry[a].eb(i);
px[i+n]=a;
px[i+n+q]=b;
qry[b].eb(i);
}
sort(all(v));
for(auto [t,i]:v){
rep(j,1,sz(c[i])-1){
Union(c[i][j],c[i][0],t);
if(group==1) break;
}
if(group==1) break;
}
rep(i,1,q) cout<<ans[i]<<"\n";
}既然不知道順序,就暴力 dfs
直接隨便選相鄰位置並繼續做...
應該會過吧