首页 > 其他分享 >Educational Codeforces Round 168 (Rated for Div. 2)A——D题解

Educational Codeforces Round 168 (Rated for Div. 2)A——D题解

时间:2024-08-01 23:27:38浏览次数:15  
标签:Educational Rated cout minn int 题解 cin &&

Educational Codeforces Round 168 (Rated for Div. 2)A——D题解

A. Strong Password

题意:给一个小写字符串密码,添加一个小写字母,使得密码更加复杂。
题解:有相同的相邻的字母,再其中间添加不同的字母;如果没有相同的相邻的字母,则最后添加一个字母。

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int t;
	cin>>t;
	while(t--)
    {
		bool k=0;
        string s;
        cin>>s;
        int l=s.length();
        if(l==1)
        {
            if(s[0]=='a')
            {
                cout<<"b"<<s;
            }
            else
            {
                cout<<'a'<<s;
            }
        }
        else
        {
            cout<<s[0];
            for(int i=1;i<l;i++)
            {
                if(s[i]!='a'&&s[i]==s[i-1]&&!k)
                {
                    cout<<'a';
                    k=1;
                }
                else
                {
                    if(s[i]==s[i-1]&&!k)
                    {
                        cout<<'b';
                        k=1;
                    }
                }
                cout<<s[i];
            }
            if(!k){
                if(s[l-1]!='a'){
                    cout<<"a";
                }
                else{
                    cout<<"b";
                }
            }
        }
        cout<<endl;
	}
	return 0;
}

B. Make Three Regions

题意:给一个 2 ∗ n 2*n 2∗n的区域,求让多少空闲区域变成障碍物可以将这个 2 ∗ n 2*n 2∗n的区域分成三个不连通的区域。
题解:
x.x . . .
. . . x.x
只有这两种情况合法。

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
        int n,cnt=0;
        string s[2];
        cin>>n;
        cin>>s[0]>>s[1];
        for(int i=1;i<n-1;i++){
            if(s[0][i]=='.'&&s[0][i-1]=='.'&&s[0][i+1]=='.'&&s[1][i]=='.'&&s[1][i+1]=='x'&&s[1][i-1]=='x')
            {
                cnt++;
            }
            if(s[1][i]=='.'&&s[1][i-1]=='.'&&s[1][i+1]=='.'&&s[0][i]=='.'&&s[0][i+1]=='x'&&s[0][i-1]=='x')
            {
                cnt++;
            }
        }
        cout<<cnt<<endl;
	}
	return 0;
}

C. Even Positions

题解:填充括号,所有奇数位置的括号消失,需要填充括号,使得这些括号匹配且权值最小(相匹配括号的距离)。
题解:尽量先满足左括号,再满足右括号。

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int n,sl=0,cnt=0;
		string s;
		cin>>n;
		cin>>s;
		for(int i=1;i<n;i+=2)
		{
			if(s[i]=='(')
			{
				cnt++;
			}
			if(s[i]==')')
			{
				cnt += i-sl;
				sl=i+1;
			}
		}
		cout<<cnt<<endl;
	}
	return 0;
}

D. Maximize the Root

题意:给一个 n n n个节点的树,第 i i i个节点的权值为 a i a_{i} ai​,每次可以选取一个子树,使其所有除根节点之外的点减一,根节点加一,问最后的所有根节点的权值最大是几。

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define int long long
const int N = 200200;
const int INF = 0x3f3f3f3f;
int n,m,idx,h[N],a[N],mi[N];
int e[N],en[N];
void init()
{
	idx = 0;
	memset(h,-1,sizeof(h)); 
	memset(mi,0x3f,sizeof(mi)); 
}
void add(int aa,int b)
{
	e[idx] = b;
	en[idx] = h[aa];
	h[aa] = idx++;
}
int dfs(int u)
{
	int minn = INF,maxn= -1;
	//for(int i=1;i<=u;i++)//while
	for(int i = h[u] ; i != -1 ; i = en[i])
	{
		int v = e[i];
		int tmp = dfs(v);
		maxn = max(maxn,tmp);
		minn = min(minn,tmp);
	}
	//if(mie == INF)mie = 0;
	if(u == 1)
	{
		return a[u] + minn;
	}
	if(minn == INF)
	{
		return a[u];
	}
	if(minn == 0)
	{
		return 0;
	}
	int mid = minn ;
	if(a[u] < mid)
		return (mid + a[u]) / 2;
	else 
		return mid;
}
int solve()
{
	init();
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	for(int i=2;i<=n;i++)
	{
		int u;
		cin>>u;
		add(u,i);
	}
	int res = dfs(1);
	cout<<res<<endl; 
}
signed main()
{
	int t;
	cin>>t;
	while(t--)
	{
		solve();
	}
	return 0;
}

标签:Educational,Rated,cout,minn,int,题解,cin,&&
From: https://blog.csdn.net/qq_50196144/article/details/140834648

相关文章

  • HT-018 Div3 能量消耗 题解 [ 绿 ] [ 线性 dp ] [ 前缀和优化 ]
    能量消耗:一个前缀和优化dp的大典题,要是数据水一点\(O(n^3)\)都能硬草过去。思路显然,定义\(dp[i]\)为考虑前\(i\)个塔,并且将前面的精灵全部收集的最小代价。于是转移:\[dp[i]=min(dp[i],dp[j]+w(j,i)+c[i])\]其中\(0\lej<i\lem\),\(w(j,i)\)表示收集从塔\(j\)到......
  • CF1987C Basil's Garden 题解
    CF1987CBasil'sGarden题解壹·题目描述有$n$个数字排成一排,接下来每隔一秒进行一次操作:如果$i=n$或$h_i>h_{i+1}$,则第$i$盆花的高度$h_i$将变为$\max(0,h_i-1)$。请问至少经过多少秒后,所有的数字都为$0$。贰·思路分析可以知道,$h_i\leq1$时$h_i←0$。显然可......
  • [题解]P6927 [ICPC2016 WF] Swap Space
    思路显然要按\(a_i,b_i\)的大小关系分类:\(a_i<b_i\):假令有两对数\((a_1,b_1),(a_2,b_2)\),且\(a_1\leqa_2\)。如果\(b_1\geqa_2\)。则按照12的顺序,将带来\(a_1\)的花费,以及\(b_1+b_2\)的额外空间;而按照21的顺序,将带来\(a_2\)的花费,以及\(b_1+b_2......
  • CF553E Kyoya and Train 题解
    Description给定一张\(n\)个点\(m\)条边的无重边无自环的有向图,你要从\(1\)号点到\(n\)号点去。如果你在\(t\)时刻之后到达\(n\)号点,你要交\(x\)元的罚款。每条边从\(a_i\)到\(b_i\),走过它需要花费\(c_i\)元,多次走过同一条边需要多次花费。走过每条边所需......
  • 【问题解决方案】npm install报错问题:npm ERR! - 多种解决方案,总有一种可以解决
    @[toc]1.问题重述安装package.json里面的包,使用npminstall但是报错2.解决方案方案1.确认根目录正确确认自己的目录是根目录(也就是处于./package.json可以找到的位置)例如--根目录----package.json----其他文件----其他文件方案2.确认文件名正确确认自己的pack......
  • P9308 「DTOI-5」#1f1e33 题解
    声明:截止\(2024.8.1\),拿下洛谷最优解最短解,代码长度不到1k。复杂度\(O(n\log\logn)\)。先骂:官方题解菜!这种纯洁的数论题居然敢引入NTT作为标算,说明出题人不会推式子。还有题解区一车\(\log\)的题解凭啥顶那么上面,推的一坨狗屎推出来的复杂度还不优秀。说明:下面除法默......
  • 2024牛客暑期多校训练营6 A.cake(题解)
    A.Cake题意两个人玩游戏,游戏分两阶段第一阶段在一棵有根树上轮流走,走到叶子停止,有根树边上有01标记,记录下走过的01串第二阶段分蛋糕,Oscar按自己的意愿切蛋糕,然后按照第一阶段获得的01串顺序依次拿蛋糕(1代表Grammy拿,0代表Oscar拿)两人都想让自己获得尽量多的蛋糕,......
  • CF1997F Chips on a Line 题解
    注意到操作是可逆的,可以先把所有筹码移动到位置\(1\),再进行若干次操作使筹码数量最小化。那么我们只需要对每一个\(i\)知道有多少种情况把筹码全移动到位置\(1\)后恰好有\(i\)个筹码,和这类情况的最少筹码数。记\(f_i\)表示斐波那契数列的第\(i\)项,显然一个位置\(i\)......
  • Luogu P1613 跑路 题解 [ 蓝 ] [ 倍增 ] [ Floyd 最短路 ] [ 状压 dp ]
    跑路:绝佳倍增好题,思路是化\(2^k\)为\(1\),倍增起预处理作用。最近不知道是撞了什么运,前一脚看的是绿题,写完之后交一发,发现直接被lxl升蓝了,血赚。思路:Floyd首先观察到每次走\(2^k\)的代价为\(1\),我们可以预处理出每次走\(2^i\)能到哪些点。但为了让这题的代码更好实......
  • Educational Codeforces Round 168 (Rated for Div. 2) 赛后总结
    比赛链接赛时提交情况:CF1997A.StrongPassword赛时思路首先看到题目可以想到的是,我们要加入的这个字符不能与其相邻字符相同,所以我没有多想就写出了第一份代码:if(s[0]=='a')cout<<'b';elsecout<<'a';cout<<s<<endl;交上之后喜提WA1。于是冷静了一会儿仔细观察了一......