# Codeforces Round #382 (Div. 1), problem: (E) Chess Championship Solution in C/C++

```#include<iostream>
#include<cstdio>
#include<algorithm>
#define N 3010
using namespace std;
int n,m,f[N][N];
struct ma{int x,y;}a[N];
bool operator<(ma p,ma q){return p.x>q.x;}
void get(int k)
{
sort(a+k,a+n+1);
int w=a[k].x;
for(int i=n;i>k;i--)
{
if(w>1) w-=2,f[a[k].y][a[i].y]=1;
else if(!w) a[i].x-=2,f[a[i].y][a[k].y]=1;
else w--,a[i].x--,f[a[k].y][a[i].y]=f[a[i].y][a[k].y]=2;
}
a[k].x=0;
}
int main()
{
cin>>n>>m;
int x=0,sum=0;
for(int i=1;i<=m;i++)
{
scanf("%d",&a[i].x);
a[i].y=i;
x+=2*(n-i);
sum+=a[i].x;
if(sum>x) return puts("no"),0;
}
for(int i=m+1;i<=n;i++)
{
a[i].y=i;
x+=2*(n-i);
a[i].x=min(a[i-1].x,x-sum);
sum+=a[i].x;
}
if(sum!=x) return puts("no"),0;
for(int i=1;i<n;i++) get(i);
puts("yes");
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i==j) putchar('X');
else if(!f[i][j]) putchar('L');
else if(f[i][j]==1) putchar('W');
else putchar('D');
}
puts("");
}
}```
(Visited 11 times, 1 visits today)