私はどのようにしても、この問題に一生懸命やっている......
いくつかの結論が見つかり、その後、同様の段落に分けて「X」列挙することができます。
私は実際に食べ物を取得しています
書式#include <iostreamの> の#include <cstdioを> する#include <CStringの> 使用して 名前空間はstd; int型 CNT [ 100005 ]。 int型のmain() { INT = 0、B = 0、C = 0 。 長い 長い ANS = - 1E18; scanf関数(" %D%dの"、&、&B)。 もし(Bの== 0 ) { printf(" %I64d \ nを"、(長い 長い)* A)。 以下のために(int型私= 1 ; I <= A; iが++)のputchar(' Oを' ); リターン 0 ; } 以下のために(int型 i = 1 ; iは=分<(A + 1 iは++; B) ) { 長い 長い X = B / Iは、YがB%I、K =最大値=(0、I- 2 )。 長い 長 W = -i * X *のxy *(2 * X + 1 )。 W + = K +(長い 長い)(AK)*(AK )。 もし ANS = W、C(ANS> W)= I。 } printf(" %I64dの\ n " 、ANS)。 用(int型 iは= 1 CNT [I] = B /; I <= C iが++)、C。 以下のために(int型 i = 1 ; iは++; iは= Bの%のC <)CNT [I]を++ 。 以下のために(int型 I = 1 ; I <= C- 1 ; I ++ ) { もし(I> 1)のputchar(' O ' )。 用(INT J = 1 ; J <= CNT [i]は、J ++ ) putchar(' X ' )。 } 以下のために(int型私= 1 ; I <= A-C + 2 - (C == 1); iが++)のputchar(' Oを' ); 用(INT J = 1 ; J <= CNT [C]; J ++)のputchar(' X ' )。 リターン 0 ; }