搞了一晚上了快,各種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