Ordenar ------ Festival de Tanabata

Festival de Tanabata porque Vega Leyenda y etiquetado como un sombrero de "Día de San Valentín".
Así TYVJ Tanabata festival de este año se llevó a cabo la siguiente línea.
Vani estudiantes invitados con éxito este año a los estudiantes cl que lo acompañara a pasar Tanabata, por lo que decidieron ir a jugar Festival de Tanabata TYVJ.
En la forma de TYVJ Festival de Tanabata Festival de Verano y el 11 distrito similares.
Festival lugar rectángulo compuesto de N columnas × N filas M M Total de puestos de números.
A pesar de una amplia gama de puestos, pero sólo está interesado en puestos de venta de piezas cl de la misma, tales como takoyaki, lo manzana de caramelo, malvavisco, casa del fuego .......
Vani contactarse con anterioridad a la persona a cargo de la zhq Festival de Tanabata, queremos ser capaces de adecuadamente dispuestos por el lugar, por lo que el número de puestos de cada fila de interés cl tanto, y el número de puestos de cada cl columna interesado demasiado.
Pero zhq dijo Vani, puestos han sido dispuestos en acabado al azar, si se quiere cumplir con los requisitos de CL, la única manera de ajustar es intercambiar dos puestos adyacentes.
Dos puestos adyacentes, si y sólo si están en la misma fila o la misma columna en posiciones adyacentes.
Debido zhq llevado equipo de desarrollo TYVJ logró distorsionar el espacio, la primera posición y la última posición de cada fila y cada columna también se cuenta como vecinos.
Ahora Vani quería saber dos de sus más capaces de cumplir con los requisitos de cuántos.
En este contexto, el número de puestos de al menos necesidad de ser intercambiado.
El formato de entrada
La primera línea contiene tres enteros N y M y T, T representa el número de puestos de CL compró.
líneas Siguiente T de dos enteros x, y, cl expresado su interés de puestos en la fila x y la columna y de.
Formato de salida
da salida a la primera de una cadena.
Si Vani se reúnen ambos requisitos, la salida de ambos;
sólo para que el número de puestos de cada fila hasta cl interés, mediante el ajuste de la salida si la fila;
Si sólo el número de puestos de cada cl columna de interés tanto como la columna de salida;
si no se encuentran, de salida imposible.
Si la cadena de salida no es imposible, la salida del siguiente número más pequeño de los intercambios, y separado por un espacio entre las cuerdas.
Datos gama
1≤N, M≤1000001≤N, M≤100000,

0≤T≤min (N * M, 100,000) 0≤T≤min (N * M, 100 000),

1≤x≤N1≤x≤N,

1≤y≤M1≤y≤M
muestra de entrada:
2. 4. 3
1. 3.
2. 1
2 2
2. 3

Resultado de muestra:
Fila 1

#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
typedef long long LL;
const int N = 100010;
int row[N], col[N], s[N], c[N];
LL work(int n, int a[]){
 for (int i = 1; i <= n; i ++)   s[i] = s[i - 1] + a[i];
  if (s[n] % n)   return -1;
 int avg = s[n] / n;
 c[1] = 0;
  for (int i = 2; i <= n; i ++)    c[i] = s[i - 1] - (i - 1) * avg;;
  sort(c + 1, c + n + 1);
  LL res = 0;
 for (int i = 1; i <= n; i ++)   res += abs(c[i] - c[(n + 1) / 2]);
 return res;
}
int main(){
 int n, m, cnt;
 scanf("%d%d%d", &n, &m, &cnt);
 
 while(cnt --){
  int x,y;
  scanf("%d%d",&x, &y);
  row[x] ++, col[y] ++;
 }
  LL r = work(n, row);
 LL c = work(m, col);
 if (r != -1 && c != -1)   printf("both %lld\n",r + c);
 else   if (r != -1)       printf("row %lld\n", r);
 else   if (c != -1)       printf("column %lld\n", c);
 else   printf("impossible");
 return 0;
}
Publicados 106 artículos originales · ganado elogios 67 · vistas 5439

Supongo que te gusta

Origin blog.csdn.net/qq_45772483/article/details/104763934
Recomendado
Clasificación