【持续更新】2025.3.29 三省联考1
省流:炸了
红橙橙黄
100+100+100+10
不会做黄题 糖丸了
T1
#include <bits/stdc++.h>
using namespace std;
#define For(i,x,y,...) for(int i=(x),##__VA_ARGS__;i<=(y);++i)
#define foR(i,x,y,...) for(int i=(x),##__VA_ARGS__;i>=(y);--i)
#define Rep(i,x,y,...) for(int i=(x),##__VA_ARGS__;i<(y);++i)
#define endl '\n'
#define debug(...)
#define debug1(a,i,...) cout<<i<<" "<<a[i]<<endl;
typedef long long ll;
#define fi first
#define se second
#define PII pair<int,int>
#define me(s,x) memset(s,x,sizeof s)
#define pb emplace_back
template<typename T=int>T read(){T x;cin>>x;return x;}
const int mod=998244353;
struct mint{
int x;mint(int x=0):x(x<0?x+mod:x<mod?x:x-mod){}
mint(ll y){y%=mod,x=y<0?y+mod:y;}
mint& operator += (const mint &y){x=x+y.x<mod?x+y.x:x+y.x-mod;return *this;}
mint& operator -= (const mint &y){x=x<y.x?x-y.x+mod:x-y.x;return *this;}
mint& operator *= (const mint &y){x=1ll*x*y.x%mod;return *this;}
friend mint operator + (mint x,const mint &y){return x+y;}
friend mint operator - (mint x,const mint &y){return x-y;}
friend mint operator * (mint x,const mint &y){return x*y;}
};mint Pow(mint x,ll y=mod-2){mint z(1);for(;y;y>>=1,x*=x)if(y&1)z*=x;return z;}
int lst[30];
int n;
string s;
void MAIN(){
me(lst,-1);//多测清空
cin>>n>>s;
Rep(i,0,s.size()){
if(lst[s[i]-'a']!=-1&&(i-lst[s[i]-'a'])&1){
return puts("No"),void();
}//只要有两个相同字符位置的字符是奇数,直接输出No
lst[s[i]-'a']=i;
}
puts("Yes");
}signed main(){
int t=read();while(t--){
MAIN();
}
return 0;
}
除了这种思路,还可以从一开始就010101排列,看看有没有同一个字符在不同位置上的(官解思路)。
T2
证明一下。
因式分解可得\(x=\left(y-z\right)*\left(y+z\right)\)
若 \(y-z\equiv 1\left(mod\space 2\right)\),则\(y+z\equiv 1\left(mod\space 2\right)\)
则 \(x\) 为奇数。
若 \(y-z\equiv 0\left(mod\space 2\right)\),则\(y+z\equiv 0\left(mod\space 2\right)\)
则 \(x\) 为4的倍数。
综上所述
当 \(x\equiv1\left(mod\space 2\right)\) 或 \(x\equiv0\left(mod\space 4\right)\)时,有解。
#include <bits/stdc++.h>
using namespace std;
#define For(i,x,y,...) for(int i=(x),##__VA_ARGS__;i<=(y);++i)
#define foR(i,x,y,...) for(int i=(x),##__VA_ARGS__;i>=(y);--i)
#define Rep(i,x,y,...) for(int i=(x),##__VA_ARGS__;i<(y);++i)
#define endl '\n'
#define debug(...)
#define debug1(a,i,...) cout<<i<<" "<<a[i]<<endl;
typedef long long ll;
#define fi first
#define se second
#define PII pair<int,int>
#define me(s,x) memset(s,x,sizeof s)
#define pb emplace_back
template<typename T=int>T read(){T x;cin>>x;return x;}
const int mod=998244353;
struct mint{
int x;mint(int x=0):x(x<0?x+mod:x<mod?x:x-mod){}
mint(ll y){y%=mod,x=y<0?y+mod:y;}
mint& operator += (const mint &y){x=x+y.x<mod?x+y.x:x+y.x-mod;return *this;}
mint& operator -= (const mint &y){x=x<y.x?x-y.x+mod:x-y.x;return *this;}
mint& operator *= (const mint &y){x=1ll*x*y.x%mod;return *this;}
friend mint operator + (mint x,const mint &y){return x+y;}
friend mint operator - (mint x,const mint &y){return x-y;}
friend mint operator * (mint x,const mint &y){return x*y;}
};mint Pow(mint x,ll y=mod-2){mint z(1);for(;y;y>>=1,x*=x)if(y&1)z*=x;return z;}
//find x % 4 == 2
//delete them
//这里解释的很清楚了,(通过打表之后发现),只要是 x % 4 == 2 删了即可
void MAIN(){
int l,r,l1,r1;
cin>>l>>r;l1=l,r1=r;
int p1=l1%4,p2=r1%4;
if(p1<=1) l1+=(2-p1);
else if(p1!=2)l1+=(5-p1);
if(p2<=1) r1-=(p2+2);
else if(p2!=2)r1+=(p2-2);
// cout<<l1<<" "<<r1<<endl;
cout<<r-l+1-(r1-l1)/4-1<<endl;
//输出答案
}signed main(){
int t=1;while(t--){
MAIN();
}
return 0;
}
T3
F1:考场思路,贪心即可
明显只能$ 0,1,1,...\ ,1 $找。
#include <bits/stdc++.h>
using namespace std;
#define For(i,x,y,...) for(int i=(x),##__VA_ARGS__;i<=(y);++i)
#define foR(i,x,y,...) for(int i=(x),##__VA_ARGS__;i>=(y);--i)
#define Rep(i,x,y,...) for(int i=(x),##__VA_ARGS__;i<(y);++i)
#define endl '\n'
#define debug(...)
#define debug1(a,i,...) cout<<i<<" "<<a[i]<<endl;
typedef long long ll;
#define fi first
#define se second
#define PII pair<int,int>
#define me(s,x) memset(s,x,sizeof s)
#define pb emplace_back
template<typename T=int>T read(){T x;cin>>x;return x;}
const int mod=998244353;
struct mint{
int x;mint(int x=0):x(x<0?x+mod:x<mod?x:x-mod){}
mint(ll y){y%=mod,x=y<0?y+mod:y;}
mint& operator += (const mint &y){x=x+y.x<mod?x+y.x:x+y.x-mod;return *this;}
mint& operator -= (const mint &y){x=x<y.x?x-y.x+mod:x-y.x;return *this;}
mint& operator *= (const mint &y){x=1ll*x*y.x%mod;return *this;}
friend mint operator + (mint x,const mint &y){return x+y;}
friend mint operator - (mint x,const mint &y){return x-y;}
friend mint operator * (mint x,const mint &y){return x*y;}
};mint Pow(mint x,ll y=mod-2){mint z(1);for(;y;y>>=1,x*=x)if(y&1)z*=x;return z;}
const int N=2e5+10;
#define int ll
int n,ans,st,mn=1e4+10,l;
char c[N];
int a[N],s[N];
bool fl=0;
//{0,1,1,...,1} find the min
void MAIN(){
l=fl=ans=st=0;
mn=1e4+10;
me(s,0);
cin>>n;
For(i,1,n) cin>>c[i];
For(i,1,n) cin>>a[i],s[i]=s[i-1]+a[i];
For(i,1,n){
if(c[i]=='0'){
st=i;
break;
}
ans+=a[i];
}
if(st==0){
cout<<ans<<endl;
return;
}
For(i,st,n){
if(c[i]=='1'&&!fl){
fl=1;
mn=1e4+10;
mn=min(mn,a[i-1]);
l=i-1;
}
if(c[i]=='1'&&fl){
mn=min(mn,a[i]);
}
if(c[i]=='0'&&fl){
fl=0;
ans+=s[i-1]-s[l-1]-mn;
// cout<<l<<" "<<i<<" "<<mn<<endl;
}
}
if(fl){
ans+=s[n]-s[l-1]-mn;
}
cout<<ans<<endl;
}signed main(){
int t=read();while(t--){
MAIN();
}
return 0;
}

浙公网安备 33010602011771号