其他分享
首页 > 其他分享> > Codeforces Round #809 (Div. 2)

Codeforces Round #809 (Div. 2)

作者:互联网

 

Problem - A - Codeforces 

         给了t个询问,n个数Ai,又给了一个数为m,原来字符串为一连串的B,有两个操作第一个操作使第Ai个变为A,第二个操作使(M+1-Ai)变为A,使其字典序最小,肯定是比一下看那个在前面,记录一下即可。

1
4 5
1 1 3 1

       注意的使我们要判断一下是否有重复操作进行了操作1以后,再次遇到这个数时进行操作二,先进行2时再进行1。

查看代码:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
char a[60];
bool st[60];
int b[60];
int main()
{
    int t;
    cin >> t;
    while(t--)
    {
        int n,m;
        cin >> n>>m;
        for(int i=1;i<=m;i++) 
        {
        	a[i]='B';
        	st[i]=false;
		}
        for(int i=1;i<=n;i++) 
        {
        	cin >> b[i];
		}
        for (int i = 1; i <= n; i ++ )
        {
            if(b[i]<=m+1-b[i]&&!st[b[i]]) 
            {
                a[b[i]]='A';
                st[b[i]]=true;
            }
            else if(b[i]>m+1-b[i]&&!st[m+1-b[i]])
            {
                 a[m+1-b[i]]='A';
                 st[m+1-b[i]]=true;
            }else if(st[b[i]])
            {
                a[m+1-b[i]]='A';
            }else if(st[m+1-b[i]])
            {
                a[b[i]]='A';
            }
        }
        for (int i = 1; i<=m; i++ )
        cout << a[i];
        cout << endl;
    }
    return 0;
}

 

Problem - B - Codeforces 

       这题真的是道好题,给了n个数Ai,每个数代表了一个颜色,当前Ai只能放在前一个的左右两边或者上边,判断一下每种颜色能达到的最大高度。首先是数据转图形。

7
1 2 3 1 2 3 1
    
input:
3 2 2 0 0 0 0 

  可以发现只要中间差两个数就可以形成高塔,很好wa了。再讨论离得更远些。

     

相离偶数个就可以,但是我们碰到了极端情况也就是最优解的选取,怎样判断最优解,这里给一个小证明即从头开始取即是最优解。

6
4 2 2 2 4 4

查看代码:
#include<iostream>
using namespace std;
const int N=1e5+10;
struct
{
	int x;
	int y;
}e[N];
bool st[N];
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int n;
		cin>>n;
		for(int i=1;i<=n;i++)
		{
			int z;
			cin>>z;
			if(!st[z])
			{
				e[z].x=i;
				e[z].y++;
				st[z]=1;
			}else if((i+1-e[z].x)%2==0)
			{
				e[z].x=i;
				e[z].y++; 
			}
		}
		for(int i=1;i<=n;i++)
		cout<<e[i].y<<' ';
		cout<<endl;
		for(int i=1;i<=n;i++)
		{
			 st[i]=0; 
			 e[i].y=0;
		}
	}
	return 0;
 }

 

Problem - C - Codeforces

        给了n个数Ai,代表每个位置柱子的初始高度,可以进行操作使柱子的高度加一使其cool(Ai-1<Ai&&Ai+1<Ai)既是山峰,求每个样例最多山峰的最小操作数。

3
2 1 2
6
3 1 4 5 5 2
8
4 2 1 3 5 3 6 1


        首先我们应该判断每个样例有几个山峰

标签:cin,int,Codeforces,st,Ai,809,Div,include
来源: https://www.cnblogs.com/acmzk/p/16506485.html