首页 > 其他分享 >Educational Codeforces Round 141 (Rated for Div. 2)

Educational Codeforces Round 141 (Rated for Div. 2)

时间:2023-01-10 15:45:16浏览次数:56  
标签:Educational Rated 名次 题意 141 int res cnt ++

A - Make it Beautiful

题意:给出一个序列a,要求重新排列它,使前\(i - 1\)个数之和不等于\(a_i\)
思路:数据范围很小。用桶存数字,然后由大到小每种数字为一组循环输出即可
赛时没看到数组是有序的,所以直接判断第一个和最后一个是不是一样的即可,如果是则NO,否则翻转第二个到最后一个,一定可以构造成功

void solve() {
	int n;
	cin >> n;
	int cnt[101] = {0};
	for (int i = 1; i <= n; i ++) {
		cin >> a[i];
		cnt[a[i]] ++;
	}
	
	int x = n, j = 1;
	while (1) {
		for (int i = 100; i >= 1; i --) {
			if (cnt[i] != 0) {
				a[j ++] = i;
				cnt[i] --;
				x --;
			}
		}
		
		if (!x) break;
	}
	
	int sum = a[1];
	bool flag = 1;
	for (int i = 2; i <= n; i ++) {
		if (sum == a[i]) {
			flag = 0;
			break;
		}else sum += a[i];
	}
	if (!flag) {
		cout << "NO" <<endl;
	}
	else {
		cout << "YES" << endl;
		for (int i = 1; i <= n; i ++) cout << a[i] << ' ';
		cout << endl;
	}
}

\[\]

B - Matrix of Differences

题意:给出一个n,要求构造出一个n*n的矩阵,使矩阵相邻数字的绝对值种类最多
思路:首先想出满足条件的序列是什么:n * n, 1, n * n - 1, 2, n * n - 2, 3这种序列是可以满足条件的。再想怎么以矩阵的形式输出,因为要保留连续的关系,故而用蛇形输出矩阵即可

void solve() {
	int n;
	cin >> n;
	int l = 1, r = n * n, ok = 1;
	vector<vector<int>> a(n + 1, vector<int> (n + 1));
	for (int i = 1; i <= n; i ++) {
		for (int j = 1; j <= n; j ++) {
			if (ok) {
				a[i][j] = l ++;
			}else a[i][j] = r --;
			ok ^= 1;
		}
		if (i % 2 == 0) {
			reverse(a[i].begin() + 1, a[i].end());
		}
	}
	
	for (int i = 1; i <= n; i ++) 
		for (int j = 1; j <= n; j ++)
			cout << a[i][j] << " \n"[j == n];
}

\[\]

C - Yet Another Tournament

题意:有n+1个人,m的时间,每两个人之间都要进行比赛。除开自己以外,其他人都是以序号定为胜负条件,第一个人无胜场,第二个人胜一场……第n个人胜n-1场。而自己与别人的的对战需要消耗时间\(a_i\)才能胜利。问最高排名多少
思路:首先,n个人的排名已经清晰,我们需要找到的就是如何最大限度的花费时间,得到最高名次,也就是打败更多的人。则将a数组从小到大排序,然后用m依次减去能减得,res++。这样获得的res就是最多能打败几个人。而n-res+1则是你的最终名次。此时你的名次是res,第res+1个人也只胜了res场(和你的那场不算),若是剩下的m + b[res] >= a[res+1],也就是我们可以将之前某一场的时间和当前剩下的时间加起来打败第res+1这个人,这样我们胜场数不变,而第res+1这个人的胜场跟我们一样,我们就可以跟res+1一样名次,res++。比如样例1 2 2 4,本来我们最多是第三名,但是如果将剩下的1用上,则我们可以到达第二名。

void solve() {
	int n, m;
	cin >> n >> m;
	vector<int> a(n + 1);
	for (int i = 1; i <= n; i ++) cin >> a[i]; 
	auto b = a;
	
	sort(b.begin() + 1, b.end());
	
	int res = 0;
	
	for (int i = 1; i <= n; i ++) {
		if (m >= b[i]) {
			m -= b[i];
			res ++;
		}else break;
	}
	
	if (res != 0 && res != n && m + b[res] >= a[res + 1]) res ++;
	cout << n + 1 - res << endl;
	
}

总结:这场打的很不好,掉了打分。也主要是我思路太迷了,一道题想了一个多小时还是没想清楚怎么构造,从一开始方向就错了。学到一种构造相邻差值最多的方式:最大值隔着最小值次大值隔着次小值

标签:Educational,Rated,名次,题意,141,int,res,cnt,++
From: https://www.cnblogs.com/lbzbk/p/17035807.html

相关文章

  • 时间序列分析 Tsfresh 基于统计学的时间序列分析方法 3、差分整合移动平均自回归模型(A
    原文链接:点这里在了解了AR和MA模型后,我们将进一步学习结合了这两者的ARIMA模型,ARIMA在时间序列数据分析中有着非常重要的地位。但在这之前,让我们先来看ARIMA的简化版ARMA......
  • 2023.1.9(Educational Codeforces Round 141 & NEERC2017)
    A.YetAnotherTournamentLinkhttps://codeforces.com/contest/1783/problem/CStatement除了你以外有\(n\)个人,编号为\(0\ton-1\),每个人有两个权值\(a_i\)和......
  • Educational Codeforces Round 114 D(搜索剪枝)
    D.TheStrongestBuild题目大意:给定n个位置,每个位置有c\({_i}\)个可选能力值(能力值升序给出即a\({_1}\)<a\({_2}\)<a\({_3}\)<...<a\({_{ci}}\)),你可以在每个......
  • Educational Codeforces Round 141 (Rated for Div. 2) Different Arrays
    Problem-D-Codeforces题意:给一个长度为n的数组a,下标从2到n-1,每个位置执行一次操作操作:设操作位置为i,$a_{i-1}+=a_i,a_{i+1}-=a_i$,或者$a_{i-1}-=a_i,a_......
  • Educational Codeforces Round 141 (Rated for Div. 2) A-E
    比赛链接A题意给一个数组\(a\),要求重排列以后\(a[i]\neqa[1,i-1]\),其中\(a[1,i-1]\)是前\(i-1\)项和。如果无解则输出NO;否则,给出一个合法的重排列后的\(a......
  • leetcode简单:[66, 67, 70, 83, 121, 141, 160, 169, ,206, 338]
    目录66.加一67.二进制求和70.爬楼梯83.删除排序链表中的重复元素121.买卖股票的最佳时机141.环形链表160.相交链表169.多数元素206.反转链表338.比特位计数66.......
  • Educational Codeforces Round 141 (Rated for Div. 2) A-C题解
    比赛链接A、MakeitBeautiful一种构造方法:按照从大到小的顺序构造,可以发现前缀和永远大于当前值。但是需要特判存在两个最大值的情况。只需要将最小值与第二位交换位置......
  • CF--edu141--D
    关键DP,直接枚举当前这个位置的数可能的值,然后就可以递推出下一个位置可能的值,直接相加或者减去就可以了。因为当前的这个值可能是负数,所以需要加上一个偏移PS:其实我又......
  • Educational Codeforces Round 141
    A.MakeitBeautiful他想要变美,我们按照题目说的做就行,通过判断我们发现如果在sort一遍后sort(a+1,a+1+n);if(a[1]==a[n]){cout<<"NO"<<"\n";......
  • P1141 01迷宫
    这题数据有点高级啊(这么高级的数据能不能把它变成黄题呢?不然显得我很垃圾(虽然是事实))思路联通块,把周围四格与自己不同的联通起来,看成一个大块,知道要的坐标属于哪个大块并......