Pagini recente » Cod sursa (job #1335197) | Cod sursa (job #1421005) | Cod sursa (job #353521) | Cod sursa (job #385418) | Cod sursa (job #4512)
Cod sursa(job #4512)
#include <cstdio>
#include <deque>
#include <multiset.h>
#include <set>
#define maxn 10001
#define maxk 51
using namespace std;
int n, k;
int x[maxn*maxk], y[maxn*maxk], T;
struct nod{ int n, w;};
struct cmp{
bool operator()(const nod &a, const nod &b) const
{
if(a.w>b.w) return 1;
if(a.w==b.w) if(a.n<b.n) return 1;
return 0;
}
};
set<nod, cmp> Q;
set<nod, cmp>::iterator it, iit;
void citire()
{
freopen("kreg.in", "r", stdin);
scanf("%d %d\n", &k, &n);
}
void calcul()
{
int i,j;
nod t, u;
t.w=k;
for(i=1;i<=n;i++)
{
t.n=i;
Q.insert(t);
}
for(i=1;i<=n;i++)
{
t=*Q.begin();
Q.erase(t);
deque<nod> R;
for(j=1, it=Q.begin();j<=t.w && it!=Q.end(); it++)
if((t.n==1 && it->n==n) || (t.n==n && it->n==1) || ( t.n==it->n+1) || (t.n==it->n-1)) ;
else
{
++T;
x[T]=t.n;
y[T]=it->n;
R.push_back(*it);
iit=it;
j++;
}
for(j=0;j<t.w;j++) Q.erase(R[j]);
for(j=0;j<t.w;j++) R[j].w--;
for(j=0;j<t.w;j++) Q.insert(R[j]);
}
}
int main()
{
citire();
k-=2;
calcul();
freopen("kreg.out", "w", stdout);
for(int i=1;i<n;i++) printf("%d %d\n", i, i+1);
printf("%d %d\n", n, 1);
for(int i=1;i<=T;i++) printf("%d %d\n",x[i], y[i]);
return 0;
}