zp1694.cpp

来自「浙江大学acm在线判题器代码集。 本人在浙大acm判题器上的所有代码(心血) 」· C++ 代码 · 共 102 行

CPP
102
字号
//#define fin cin 
#include <fstream> 
#include <iostream>
#include <string>

using namespace std;
char st[20];

int icpy( int r, int h )
{
  int ta, t = 0, k = 1;
  for ( int i = h; i > r; i-- )
  {
    ta = st[i - 1] - '0';
    t += ta * k;
    k *= 10;
  }
  return t;
}

int main()
{
  //ifstream fin("c:\\in1694.txt");
  int mx, l, s, i, sum, max, ty, r, h;
  int p[10], q[10];
  cin >> mx;
  cin >> st;
  while ( mx != 0 || st[0] != '0' )
  {
    l = strlen( st );
    s = 0;
    for ( i = 0; i < l; i++ )
    s += st[i] - '0';
    if ( s > mx )
      cout << "error" << endl;
    else
    if (l==1)
      cout<<s<<' '<<s<<endl;
    else
    {
      for ( i = 0; i <= l; i++ ) p[i] = 1;
      p[1] ++;
      max = 0; ty = 0;
      while ( 1 )
      {
        p[1] --;
        i = 1;
        while ( 1 )
        {
          if ( p[i] < 0 && i < l )
          { p[i + 1] --; p[i] = 1; i++; }
          else
            break;
        }
        if ( i < l )
        {
          p[l] = 1;
          r = 0; h = 1; sum = 0;
          while ( h <= l )
          {
            while ( !p[h] ) h++;
            sum += icpy( r, h );
            if ( sum > mx ) break;
            r = h; h++;
          }
          if ( sum <= mx )
            if ( sum == max )
              ty = 1;
            else if ( sum > max )
            {
              max = sum; ty = 0;
              for ( i = 0; i <= l; i++ )
                q[i] = p[i];
            }
        }
        else
          break;
      }
      if ( ty )
        cout << "rejected" << endl;
      else
      {
        cout << max;
        r = 0; h = 1;
        while ( h <= l )
        {
          while ( !q[h] ) h++;
          cout << ' ';
          for ( i = r; i < h; i++ )
            cout << st[i];
          r = h; h++;
        }
        cout << endl;
      }
    }
    cin >> mx;
    cin >> st;
  }
  return 0;
}

⌨️ 快捷键说明

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