搞了一晚上了快,各種YY亂搞啊,終於過了,一開始YY的都是錯的,覺得 這道題目a,b的范圍都是10^5,那就暴力枚舉b被分成了幾份,然後再繼續YY,只用一個o去分隔x,這樣最後剩下的o再集中在一起,也就是x的份數總是比o的份數多一份,也就是盡可能把x分開,盡可能把o集中在一塊,前面都把x分開了,一個o分開兩份x,後面還能有一大堆的o在一起,這樣就滿足了,然後又出錯了,因為分成幾份,有余數的,比如b = 6,你要分成4份,我以開始是分成 1 1 1 3這樣子,這樣不行,應該分成 1 1 2 2把余數平均馮前面1個,直到分光了位置,主要就是 減少b的存在,其實a的部分很好控制,a的部分 減去前面要去分隔x的,每個分隔只需消耗一個o,剩下的乘一下 加上前面多少個,b就要分兩部分計算,一部分是 得到了余數分配的,還有一部分就是 整除所得的值
ll aa,bb;
ll ans ;
string ret;
void init() {
}
bool input() {
while(cin>>aa>>bb) {
return false;
}
return true;
}
void cal() {
ll mark;
ans = 0ll;
ret = "";
if(aa == 0) {
ans = -bb * bb;
ll q = bb;
while(q--)ret += "x";
return ;
}
if(bb == 0) {
ans = aa * aa;
ll q = aa;
while(q--)ret += "o";
return ;
}
ans = -INF;
for(ll i=2;i<=aa + 1;i++) {
ll now = (aa - i + 2) * (aa - i + 2) + i - 2;
ll tmp = bb/i;
ll tt = bb - tmp * i;
now -= tt * (tmp + 1ll) * (tmp + 1ll) + (i - tt) * tmp * tmp;
if(now > ans) {
ans = now;
mark = i;
}
}
ll tmp = bb/mark;
ll tt = bb - tmp * mark;
bool flag = false;
ll cnt = 0;
for(ll i=1;i