周赛#Round 1 题解

文章讨论了两种不同的编程解题方法,一是处理T1文本左右对齐问题,采用数学模拟方法计算单词间距;二是解决T2L覆盖问题,通过分析1和0的排列找到覆盖规律。对于T3过分的子区间问题,作者提到在考试中使用了暴力求解策略。
摘要由CSDN通过智能技术生成

T1 文本左右对齐

本题其实真的很简单,但我考试时竟然没做对,应该是看到这个很复杂有为难情绪吧。以后我就知道了,凡只是复杂不考思维的题,一般都很简单,只要把情况考虑完整一般都能AC。
这道题直接用数学方法依次判断每行的单词数量,然后算出间距,剩下的空格再均分到每两个单词间就好了。
!!!这个方法叫模拟:我挺喜欢的。

T2 L-覆盖

分析:

这是一道数学构造的题目,只要找到覆盖的规律,就可以。

1.当出现2个0相邻的时候(竖着,横着或对角),需要覆盖的次数就等于1的个数
2.else if 如果1的个数等于输入的总数,则覆盖的次数等于1的个数-2
3.else 当输入中存在0却不相邻时,覆盖的次数等于1的个数-1

注意:

本题输入数据不严格按照每行x个,所以需要通过输入字符串的方式来输入。

代码:

#include <bits/stdc++.h>
using namespace std;
int x, y, sum, o;
bool p[505][505];
string s;
int main() {
	freopen("cover.in", "r", stdin);
	freopen("cover.out", "w", stdout);
	cin >> x >> y;
	for (int i = 1; i <= x; i++){
		cin >> s;
		for (int j = 1; j <= y; j++) {
			if (s[j - 1] == '1') sum++, p[i][j] = 1;
			else p[i][j] = 0;
		}
	}
	for (int i = 1; i <= x; i++)
		for (int j = 1; j <= y; j++) {
			if ( (p[i][j] == 0 && p[i][j + 1] == 0 && j < y) || (p[i][j] == 0 && p[i + 1][j] == 0 && i < x)) {
				cout << sum;
				return 0;
			}
			if (p[i][j] == 0 && ( (p[i + 1][j + 1] == 0 && i < x && j < y ) || ( p[i + 1][j - 1] == 0 && i < x && j > 1))) {
				cout << sum;
				return 0;
			}
		}
	if (sum != x * y) cout << sum - 1;
	else cout << sum - 2;
	return 0;
}

T3 过分的子区间

这道题我考试时直接暴力,最后只得到了20分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来自八中的小鹿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值