CF550
CF550A
先find AB 替换一下 再找 BA
然后 两个串反过来再判一次即可
点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inl inline
#define endl '\n'
#define gc cin.get
#define pc cout.put
const int N=2e6+5;
const int M=1e7+5;
const int inf=0x3f3f3f3f;
const int mod=998244353;
inl ll read(){
ll x=0,f=1;char c=gc();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=gc();}
while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=gc();}
return x*f;
}
inl void write(int x){
if(x<0){pc('-');x=-x;}
if(x>9)write(x/10);
pc(x%10+'0');
}
inl void writei(int x){write(x);pc(' ');}
inl void writel(int x){write(x);pc('\n');}
int n,m,flag1,flag2;
string s;
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>s;
int x=s.find("BA");
if(x!=-1){
string t=s;
t.replace(x,2,"kkksc03");
int y=t.find("AB");
if(y!=-1){cout<<"YES"<<endl;return 0;}
}
x=s.find("AB");
if(x!=-1){
s.replace(x,2,"kkksc03");
int y=s.find("BA");
if(y!=-1){cout<<"YES"<<endl;return 0;}
}
cout<<"NO"<<endl;
return 0;
}
CF550B
注意到 \(n\le 15\) 那么直接爆搜。
点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inl inline
#define endl '\n'
#define gc cin.get
#define pc cout.put
const int N=2e6+5;
const int M=1e7+5;
const int inf=0x3f3f3f3f;
const int mod=998244353;
inl ll read(){
ll x=0,f=1;char c=gc();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=gc();}
while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=gc();}
return x*f;
}
inl void write(int x){
if(x<0){pc('-');x=-x;}
if(x>9)write(x/10);
pc(x%10+'0');
}
inl void writei(int x){write(x);pc(' ');}
inl void writel(int x){write(x);pc('\n');}
int n,l,r,x,c[N],ans;
inl void dfs(int k,int sum,int mi,int ma){
if(k>n){
ans+=(ma-mi>=x&&l<=sum&&sum<=r);
return;
}
dfs(k+1,sum,mi,ma);
dfs(k+1,sum+c[k],mi?min(mi,c[k]):c[k],ma?max(ma,c[k]):c[k]);
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
n=read();l=read();r=read();x=read();
for(int i=1;i<=n;i++)c[i]=read();
dfs(1,0,0,0);
cout<<ans<<endl;
return 0;
}
CF550C
差点被橙题创飞
要求选出来的数为8的倍数 由小学奥数可知1000为8的倍数
所以最多选3位数 多的一定没用
\(n^3\) 暴力判即可
点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inl inline
#define endl '\n'
#define gc cin.get
#define pc cout.put
const int N=2e6+5;
const int M=1e7+5;
const int inf=0x3f3f3f3f;
const int mod=998244353;
inl ll read(){
ll x=0,f=1;char c=gc();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=gc();}
while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=gc();}
return x*f;
}
inl void write(int x){
if(x<0){pc('-');x=-x;}
if(x>9)write(x/10);
pc(x%10+'0');
}
inl void writei(int x){write(x);pc(' ');}
inl void writel(int x){write(x);pc('\n');}
int n;
string s;
inl int num(char c){return c-'0';}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>s;
for(int i=0;i<s.size();i++){
if(!num(s[i])||num(s[i])==8){
cout<<"YES"<<endl<<num(s[i])<<endl;
return 0;
}
for(int j=i+1;j<s.size();j++){
if((num(s[i])*10+num(s[j]))%8==0){
cout<<"YES"<<endl<<num(s[i])<<num(s[j])<<endl;
return 0;
}
for(int k=j+1;k<s.size();k++){
if((num(s[i])*100+num(s[j])*10+num(s[k]))%8==0){
cout<<"YES"<<endl<<num(s[i])<<num(s[j])<<num(s[k])<<endl;
return 0;
}
}
}
}
cout<<"NO"<<endl;
return 0;
}
CF550D
神奇构造。
要求无向图所有点度数为 \(k\) 并要求存在桥
当 \(k\) 为偶数时 图中一定存在欧拉回路 没有割边 无解
当 \(k\) 为奇数时 以桥为界把图分成完全相同的两部分
对于每部分 设点数为 \(2k-1\) 分成三部分: \(k-1\) \(k-1\) \(1\)
前两部分要求度数 \(k\) ,剩下一个点度数 \(k-1\) 连割边
第一部分向第二部分两两连边 然后第一部分编号奇数和偶数连边 这样第一部分就完事了
对于第二部分 每个点再向最后一个点连边 这样就完事了
点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inl inline
#define endl '\n'
#define gc cin.get
#define pc cout.put
const int N=2e6+5;
const int M=1e7+5;
const int inf=0x3f3f3f3f;
const int mod=998244353;
inl ll read(){
ll x=0,f=1;char c=gc();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=gc();}
while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=gc();}
return x*f;
}
inl void write(int x){
if(x<0){pc('-');x=-x;}
if(x>9)write(x/10);
pc(x%10+'0');
}
inl void writei(int x){write(x);pc(' ');}
inl void writel(int x){write(x);pc('\n');}
int n,k;
vector<pair<int,int>>v;
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
k=read();
if(!(k&1)){cout<<"NO"<<endl;return 0;}
for(int i=1;i<=k-1;i+=2)v.push_back({i,i+1});
for(int i=1;i<=k-1;i++)
for(int j=1;j<=k-1;j++)
v.push_back({i,k-1+j});
for(int j=1;j<=k-1;j++)v.push_back({k-1+j,k*2-1});
cout<<"YES"<<endl<<4*k-2<<' '<<k*(2*k-1)<<endl;
for(auto i:v)cout<<i.first<<' '<<i.second<<endl;
for(auto i:v)cout<<i.first+2*k-1<<' '<<i.second+2*k-1<<endl;
cout<<k*2-1<<' '<<k*4-2<<endl;
return 0;
}