Cod sursa(job #64333)

Utilizator crawlerPuni Andrei Paul crawler Data 2 iunie 2007 17:17:21
Problema Taramul Nicaieri Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <cstdio>
#include <algorithm>
#include <bitset>

using namespace std;

#define Nmax 100100

int x[Nmax],y[Nmax],A,B;

void solve(int st,int dr)
 {
  bitset<128> v[128];
  
  int i;
  for(i=1;i<=100;++i)
   v[i] = 0;

  for(i=st;i<=dr;++i)
   if(v[x[i]][y[i]] || x[i] == y[i])
    {
     //bubu
     reverse(x+i,x+A+1);
     solve(i,A);
    }
     else
    v[x[i]][y[i]] = 1;
 }

int main()
 {
	freopen("harta.in","r",stdin);
        freopen("harta.out","w",stdout);

        int i,n,m,a,b;

        scanf("%d",&n);

        for(i=1;i<=n;++i)
         {
          scanf("%d%d",&a,&b);

          while(a--) x[++A] = i;
          while(b--) y[++B] = i;
         }

        solve(1,A);
        
        printf("%d\n",A);

        for(i=1;i<=A;++i)
         printf("%d %d\n",x[i],y[i]);
        
        return 0;
 }