2024.7.22模拟赛5

模拟赛

咕了两天才发现少了一天的题解。

T1 Make It Increasing

水。

code
#include<bits/stdc++.h>
using namespace std;
const int N = 40;
#define LL long long
int t,n;
LL a[N];
int main()
{
//	freopen("in.in","r",stdin);
//	freopen("out.out","w",stdout);
	scanf("%d",&t);
	while(t--)
	{
		LL ans=0; bool fl=0;
		scanf("%d",&n);
		for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
		for(int i=n-1;i>=1;i--)
		{
			while(a[i]>=a[i+1])
			{
				if(!a[i+1])
				{
					fl=1; break;
				}
				a[i]>>=1; ans++;
			}
			if(fl) break;
		}
		if(fl) printf("-1\n");
		else printf("%lld\n",ans);
	}
	return 0;	
}

T2 Shrinking

二分,水,注意判等。

其实是道线性的,但不会有人卡 log 吧。

code
#include<bits/stdc++.h>
using namespace std;
const int N = 1e4+5;
int n;
char s[N];
int a[26][N],cnt[26];

bool check(int mid)
{
	for(int i=0;i<26;i++)
	{
		for(int j=1;j<=cnt[i];j++)
		{
			if(a[i][j]-a[i][j-1]-1>mid) break;
			if(a[i][j]>=n-mid) return 1;
		}
	}
	return 0;
}
int main()
{
	//freopen("string2.in","r",stdin);
	scanf("%s",(s+1)); n=strlen(s+1);
	for(int i=1;i<=n;i++) a[s[i]-'a'][++cnt[s[i]-'a']]=i;
	int l=0,r=n,ans=n-1;
	while(l<=r)
	{
		int mid=l+r>>1;
		if(check(mid)) ans=mid,r=mid-1;
		else l=mid+1;
	}
	printf("%d\n",ans);
	return 0;
}

T3 Game on Tree

学习博弈论

code
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
int n;
vector<int> v[N];
int dfs(int u,int f)
{
	int res=0;
	for(int i:v[u]) if(i!=f) res^=dfs(i,u)+1;
	return res;
}
int main()
{
	scanf("%d",&n);
	for(int i=1,x,y;i<n;i++)
	{
		scanf("%d%d",&x,&y);
		v[x].push_back(y);
		v[y].push_back(x);
	}
	puts(dfs(1,0)?"Alice":"Bob");
	return 0;
}

T4 咕咕咕

posted @ 2024-07-24 21:18  ppllxx_9G  阅读(16)  评论(0编辑  收藏  举报