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分。