【持续更新】2025.3.29 三省联考1

省流:炸了

红橙橙黄

100+100+100+10

不会做黄题 糖丸了

T1

CF1807C

#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

LG_P9231

证明一下。

因式分解可得\(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

CF1743C

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;
}

T4

LG_P9223

posted @ 2025-04-05 18:21  cruisexsy2011  阅读(28)  评论(0)    收藏  举报