⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p2140_贪心.cpp

📁 高手写的所有acm例程 在acm.zju.edu.cn 上的题目的例程
💻 CPP
字号:
#include <stdio.h>
#include <algorithm>

using    namespace std;

int      N , Many [100] , Order [100] , Tot;
bool     Opt [100] [100] , FoundError;

bool cmp ( const int &a , const int &b )
{
     return Many [a] > Many [b];
}

main()
{
      bool  first = true;
      while ( scanf ( "%d" , &N ) , N ) {
            if ( first ) first = false; else printf ( "\n" );
            for ( int i = Tot = 0; i < N; i ++ ) scanf ( "%d" , &Many [i] ) , Tot += Many [i];
            if ( Tot & 1 ) {
                 printf ( "~><~\n" );
                 continue;
            }
            for ( int i = 0; i < N; i ++ ) Order [i] = i;
            memset ( Opt , 0 , sizeof ( Opt ));
            FoundError = false;
            do {
                sort ( Order , Order + N , cmp );
                if ( Many [Order [0]] == 0 ) break;
                for ( int i = 1; !FoundError && Many [Order [0]] && i < N; i ++ )
                    if ( Many [Order [i]] == 0 ) FoundError = true;
                    else Many [Order [i]] -- , Many [Order [0]] -- , Opt [Order [0]] [Order [i]] = Opt [Order [i]] [Order [0]] = true;
                if ( Many [Order [0]] ) FoundError = true;
            } while ( !FoundError );
            if ( FoundError ) {
                 printf ( "~><~\n" );
                 continue;
            }
            for ( int i = 0; i < N; i ++ ) {
                for ( int j = 0; j < N; j ++ ) {
                    if ( j ) printf ( " " );
                    printf ( "%d" , Opt [i] [j] ? 1 : 0 );
                }
                printf ( "\n" );
            }
      }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -