BNUoj 16th Beijing Normal University Programming Competition Final (53082) Cómo organizar la competencia

Cómo organizar la competencia en la final de la 16 ° Competencia de Programación de la Universidad Normal de Beijing (53082)

Titulo

http://www.bnuoj.com/problem_show.php?pid=53082

Titulo

Es la competencia anual de programación nuevamente ~
Ahora los concursantes hacen una larga fila frente a la sala de computación, hay chicos lindos y grandes en esta sala, y todos los chicos lindos admiran a los grandes. Esperamos el maravilloso nivel de este juego. Para cada Mengxin, su expectativa para este partido es el número de grandes jugadores frente a él / ella, y la expectativa total de este partido es igual a cada Mengxin La suma de las expectativas.
Como organizador de esta competencia, los estudiantes de SK esperan que la expectativa de la competencia sea la correcta. Si es demasiado baja, hará que todos estén menos interesados, y si es demasiado alta, se rociará y no cumplirá con las expectativas.
Ahora los estudiantes de SK pueden intercambiar dos competidores adyacentes, pero el juego está por comenzar. Los estudiantes de SK quieren saber cuántos intercambios son necesarios para hacer que la expectativa total de este juego sea solo k, ¿pueden ayudarlo? Es?

Solución

Al observar, podemos encontrar que cada vez que intercambiamos las posiciones del nuevo y el hermano mayor, la satisfacción cambiará1. Entonces registramos la satisfacción actual y luego hacemos una diferencia con el valor k. También preste atención a juzgar el valor máximo, que debería ser el número de gángsters multiplicado por el número de recién llegados.

Código

#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<stack>
#include<string.h>
#include<stdio.h>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
#define ll long long
const int maxn = 100005;
int main()
{
	int T;
	char s[1000006];
	char ans[1000006];
	scanf("%d",&T);
	while(T--)
	{
		ll n,d=0,m=0;
		ll sum = 0,ret = 0,k;
		scanf("%lld %lld",&n,&k);
		getchar();
		for(int i=0;i<n;i++)
		{
			scanf("%c",&s[i]);
			if(s[i] == 'D')
				d++;
			else
			{
				m++;
				ret += d;
			}
		}
		sum = d*m;
		if(k>sum)
			puts("-1");
		else
			printf("%lld\n",abs(k-ret));
	}
	return 0;
}
Publicado 51 artículos originales · alabanza ganado 16 · vistas 3366

Supongo que te gusta

Origin blog.csdn.net/weixin_43911945/article/details/100019874
Recomendado
Clasificación