#661(Div3)补题

难得一次Div3又因为自己太过愚钝 小仙女怎么可以说这种话呢,明明是因为没有念“巴啦啦能量”Hhhhh,总之只达成了一半的目标。现在,谨以此篇blog纪念这场珍贵的Div3。

第三题

C. Boats Competition
其实题意很简单,就是给你一堆数,找到一个数,让和为这个数的组数最多(一个数只能在一组中),我知道可以暴力枚举,因为我看到了这个
在这里插入图片描述
但是!我没看到这个
在这里插入图片描述
原来给出的这些数是有范围的,范围就是不超过这组数据的个数。。我枯了,我还举起爪子就漫天枚举呢Q^Q

#include 
using namespace std;

const int N = 55;
int t, n, ans;

void solve(){
	scanf("%d", &t);
	while(t--){
		scanf("%d", &n);
		vector<int> cnt(n + 1);
		ans = 0;
		for (int i = 0; i < n; ++i) {
			int x;
			scanf("%d", &x);
			++cnt[x];//统计每种体重的人数
		}
		for (int total = 2; total <= 2 * n; ++total)//total是两人的总体重(枚举找optimal s)
		{
			int cur = 0;
			for (int i = 1; i < (total + 1) / 2; ++i)//其中的一个胖纸
			{
				if((total - i) > n) continue;//另一个胖子的体重是不允许超过n的
				cur += min(cnt[i], cnt[total - i]);//取最少的那个才能组队
			}
			if(total % 2 == 0) cur += cnt[total / 2] / 2;//也可以两人体重一样(上面的情况两人体重不相等)
			ans = max(ans, cur);//越滚越大
		}
		printf("%d\n", ans);
	}
}

int main(int argc, char const *argv[])
{
	solve();
	return 0;
}

第四题

D. Binary String To Subsequences
说实话,这题好懵圈呀~【看题解读懂题意系列】
那路或多!我们遇到0了就要努力地把它放到以1结尾的串后面(然后以1结尾变成以0结尾),如果没有我们就另开(无奈之举);同样,我们遇到1了就要努力地把它放到以0结尾的串后面(然后以0结尾变成以1结尾),如果没有我们就另开(无奈之举,尽量不要新开)
感觉标程的写法很美妙~我就懒得自己想了,吸吸吸(●’◡’●)

#include 
using namespace std;

int t, n;

void solve(){
	scanf("%d", &t);
	while(t--){
		scanf("%d", &n);
		char s[n];
		scanf("%s", s);
		vector<int> ans(n);
		vector<int> pos0, pos1;//用pos0来存以0结尾的前缀,用pos1来存以1结尾的前缀
		for (int i = 0; i < n; ++i)
		{
			int res = pos0.size() + pos1.size();
			if(s[i] == '0'){//读到0,去找以1结尾的
				if(pos1.empty()) pos0.push_back(res);//没有以1为结尾的串才自立门户
				else{
					res = pos1.back();
					pos1.pop_back();//找到以1为结尾的最后组号
					pos0.push_back(res);//加入了之后就以0结尾了,所以压入以0结尾的容器
				}
			}else{//读到1,去找以0结尾的
				if(pos0.empty()) pos1.push_back(res);//没有以0为结尾的串才自立门户
				else{
					res = pos0.back();
					pos0.pop_back();//找到以0为结尾的最后组号
					pos1.push_back(res);//加入了之后就以1结尾了,所以压入以1结尾的容器
				}
			}
			ans[i] = res;//每轮记录一次
		}
		printf("%lld\n", pos0.size() + pos1.size());
		for(int it : ans) printf("%d ", it + 1);
		printf("\n");
	}
}

int main(int argc, char const *argv[])
{
	solve();
	return 0;
}

先酱吧,溜了溜了,去看雨巨的视频了QWQ
同求三连>_<
#661(Div3)补题_第1张图片#661(Div3)补题_第2张图片

你可能感兴趣的:(来打一把cf)