程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> CodeForces 398A Cards 貪心 暴力 瞎搞

CodeForces 398A Cards 貪心 暴力 瞎搞

編輯:C++入門知識

CodeForces 398A Cards 貪心 暴力 瞎搞


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




  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved