国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

codeforces 730 A Toda 2

2019-11-08 20:06:32
字體:
來源:轉載
供稿:網友

PRoblem

codeforces.com/problemset/problem/730/A

Reference

blog.csdn.net/ACMore_Xiong/article/details/52907334

題意

有 n 個正整數,每次可以選其中的 2 ~ 5 個數來同時減掉 1,減到 0 之后可以繼續減但值還是 0。

要使得它們最終全部相等,并且讓這個數盡量大。

Analysis

只考慮同時減2個或3個的情況(如果有多個相等的最大值,可以把它們分成兩個一組或三個一組,多減幾次)。

如果剛好有3個相等的最大值,就選中那3個一起減;否則,選最大的兩個一起減。直到最大值和最小值相等。

之前以為 multiset 的 rbegin() 和 end() 返回值是一樣的,一直 RE。

但其實 end() 返回的是最后一個元素的后一個位置,而 rbegin() 是最后一個元素的位置。

multiset 的 erase() 不能接受 rbegin() 的返回值(類型是 reverse_iterator),但能接受 begin() 的返回值,所以我是按降序排。

聽說 multiset 比較相等的時候不是用“==”,而是用“ ! (a < b) && ! (b < a) ”,所以不需要重載“==”,只要重載“<”。(用 count() 的時候)

(p.s.:原來“ ios::sync_with_stdio(false) ”這句是要寫在函數里面的…)

Source code

#include <iostream>#include <string>#include <vector>#include <set>using namespace std;const int N = 100;struct node{	int id, r;	node() {}	node(int _i, int _r): id(_i), r(_r) {}	bool Operator < (const node &nd) const	{		return r > nd.r;	}};multiset<node> ms;vector<string> ans;int main(){	ios::sync_with_stdio(false);	int n;	cin >> n;	for(int i=0, r; i<n; ++i)	{		cin >> r;		ms.insert(node(i, r));	}	for(int num=2; ms.begin()->r != ms.rbegin()->r; num=2)	{		if(ms.count(*ms.begin()) == 3)			++num;		vector<node> v(num);		string s(n, '0');		for(int i=0; i<num; ++i)		{			v[i] = *ms.begin();			ms.erase(ms.begin());			if(--v[i].r < 0)				v[i].r = 0;			s[v[i].id] = '1';		}		ans.push_back(s);		ms.insert(v.begin(), v.end());	}	cout << ms.begin()->r << '/n' << ans.size() << '/n';	for(int i=0, e=ans.size(); i<e; ++i)		cout << ans[i] << '/n';	ms.clear();	ans.clear();	return 0;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 柞水县| 松溪县| 融水| 娱乐| 望谟县| 白水县| 德令哈市| 泰顺县| 芦山县| 福安市| 上蔡县| 连州市| 正阳县| 龙游县| 林甸县| 拜城县| 米泉市| 汕尾市| 佳木斯市| 贡嘎县| 方正县| 红安县| 怀安县| 祁阳县| 宣汉县| 油尖旺区| 涞源县| 南部县| 柳江县| 宾川县| 伊通| 湾仔区| 宣武区| 堆龙德庆县| 平利县| 论坛| 桂阳县| 信宜市| 怀来县| 循化| 江安县|