1111 对称日
分数 15
作者 陈越
单位 浙江大学
央视新闻发了一条微博,指出 2020 年有个罕见的“对称日”,即 2020 年 2 月 2 日,按照
年年年年月月日日格式组成的字符串 20200202 是完全对称的。给定任意一个日期,本题就请你写程序判断一下,这是不是一个对称日?
输入格式:
输入首先在第一行给出正整数 N(1<N≤10)。随后 N 行,每行给出一个日期,却是按英文习惯的格式:
Month Day, Year。其中Month是月份的缩写,对应如下:
- 一月:Jan
- 二月:Feb
- 三月:Mar
- 四月:Apr
- 五月:May
- 六月:Jun
- 七月:Jul
- 八月:Aug
- 九月:Sep
- 十月:Oct
- 十一月:Nov
- 十二月:Dec
Day是月份中的日期,为 [1, 31] 区间内的整数;Year是年份,为 [1, 9999] 区间内的整数。输出格式:
对每一个给定的日期,在一行中先输出
Y如果这是一个对称日,否则输出N;随后空一格,输出日期对应的年年年年月月日日格式组成的字符串。输入样例:
5 Feb 2, 2020 Mar 7, 2020 Oct 10, 101 Nov 21, 1211 Dec 29, 1229输出样例:
Y 20200202 N 20200307 Y 01011010 Y 12111121 N 12291229
#include<iostream>
#include<vector>
#include<string>
#include<unordered_map>
using namespace std;
bool fun(string r) {
int i = 0, j = r.size() - 1;
//不能写i!=j 遇到偶数的情况会一直循环
while (i < j) {
if (r[i] != r[j]) {
return false;
}
i++;
j--;
}
return true;
}
int main() {
int n;
cin >> n;
unordered_map < string, int > arr = {
{"Jan",1},{"Feb",2},{"Mar",3},{"Apr",4},{"May",5},
{"Jun",6},{"Jul",7},{"Aug",8},{"Sep",9},{"Oct",10},
{"Nov",11},{"Dec",12}
};
while (n--) {
char a[4];
int b, c;
char t;
scanf("%s %d%c %d", a, &b, &t, &c);
string m, d, y;
y = to_string(c);
m =to_string(arr[string(a)]);
d = to_string(b);
while (m.size() != 2) {
m = '0' + m;
}
while (d.size() != 2) {
d = '0' + d;
}
while (y.size() != 4) {
y = '0' + y;
}
string r = y + m+d;
if (fun(r)) {
cout << "Y " << r << endl;
}
else {
cout << "N " << r << endl;
}
}
return 0;
}
1112 超标区间
分数 20
作者 陈越
单位 浙江大学
上图是用某科学研究中采集的数据绘制成的折线图,其中红色横线表示正常数据的阈值(在此图中阈值是 25)。你的任务就是把超出阈值的非正常数据所在的区间找出来。例如上图中横轴 [3, 5] 区间中的 3 个数据点超标,横轴上点 9 (可以表示为区间 [9, 9])对应的数据点也超标。
输入格式:
输入第一行给出两个正整数 N(≤104)和 T(≤100),分别是数据点的数量和阈值。第二行给出 N 个数据点的纵坐标,均为不超过 1000 的正整数,对应的横坐标为整数 0 到 N−1。
输出格式:
按从左到右的顺序输出超标数据的区间,每个区间占一行,格式为
[A, B],其中A和B为区间的左右端点。如果没有数据超标,则在一行中输出所有数据的最大值。输入样例 1:
11 25 21 15 25 28 35 27 20 24 18 32 23输出样例 1:
[3, 5] [9, 9]输入样例 2:
11 40 21 15 25 28 35 27 20 24 18 32 23输出样例 2:
35
#include<iostream>
#include<vector>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<int> arr(n);
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
vector<int> brr;
int max = arr[0];
for (int i = 0; i < n; i++) {
if (arr[i] > m) {
brr.push_back(i);
int t = i;
i++;
while (arr[i] > m&&i<n) {
i++;
}
if (t == i) {
brr.push_back(i);
}
else {
brr.push_back(i - 1);
}
}
if (arr[i] > max) {
max = arr[i];
}
}
if (brr.size() == 0) {
cout << max << endl;
}
else {
for (int i = 0; i < brr.size(); i += 2) {
cout << "[" << brr[i] << ", " << brr[i + 1] << "]" << endl;
}
}
return 0;
}
1109 擅长C
分数 20
作者 陈越
单位 浙江大学
当你被面试官要求用 C 写一个“Hello World”时,有本事像下图显示的那样写一个出来吗?
输入格式:
输入首先给出 26 个英文大写字母 A-Z,每个字母用一个 7×5 的、由
C和.组成的矩阵构成。最后在一行中给出一个句子,以回车结束。句子是由若干个单词(每个包含不超过 10 个连续的大写英文字母)组成的,单词间以任何非大写英文字母分隔。题目保证至少给出一个单词。
输出格式:
对每个单词,将其每个字母用矩阵形式在一行中输出,字母间有一列空格分隔。单词的首尾不得有多余空格。
相邻的两个单词间必须有一空行分隔。输出的首尾不得有多余空行。
输入样例:
..C.. .C.C. C...C CCCCC C...C C...C C...C CCCC. C...C C...C CCCC. C...C C...C CCCC. .CCC. C...C C.... C.... C.... C...C .CCC. CCCC. C...C C...C C...C C...C C...C CCCC. CCCCC C.... C.... CCCC. C.... C.... CCCCC CCCCC C.... C.... CCCC. C.... C.... C.... CCCC. C...C C.... C.CCC C...C C...C CCCC. C...C C...C C...C CCCCC C...C C...C C...C CCCCC ..C.. ..C.. ..C.. ..C.. ..C.. CCCCC CCCCC ....C ....C ....C ....C C...C .CCC. C...C C..C. C.C.. CC... C.C.. C..C. C...C C.... C.... C.... C.... C.... C.... CCCCC C...C C...C CC.CC C.C.C C...C C...C C...C C...C C...C CC..C C.C.C C..CC C...C C...C .CCC. C...C C...C C...C C...C C...C .CCC. CCCC. C...C C...C CCCC. C.... C.... C.... .CCC. C...C C...C C...C C.C.C C..CC .CCC. CCCC. C...C CCCC. CC... C.C.. C..C. C...C .CCC. C...C C.... .CCC. ....C C...C .CCC. CCCCC ..C.. ..C.. ..C.. ..C.. ..C.. ..C.. C...C C...C C...C C...C C...C C...C .CCC. C...C C...C C...C C...C C...C .C.C. ..C.. C...C C...C C...C C.C.C CC.CC C...C C...C C...C C...C .C.C. ..C.. .C.C. C...C C...C C...C C...C .C.C. ..C.. ..C.. ..C.. ..C.. CCCCC ....C ...C. ..C.. .C... C.... CCCCC HELLO~WORLD!输出样例:
C...C CCCCC C.... C.... .CCC. C...C C.... C.... C.... C...C C...C C.... C.... C.... C...C CCCCC CCCC. C.... C.... C...C C...C C.... C.... C.... C...C C...C C.... C.... C.... C...C C...C CCCCC CCCCC CCCCC .CCC. C...C .CCC. CCCC. C.... CCCC. C...C C...C C...C C.... C...C C...C C...C CCCC. C.... C...C C.C.C C...C CC... C.... C...C CC.CC C...C C.C.. C.... C...C C...C C...C C..C. C.... C...C C...C .CCC. C...C CCCCC CCCC.
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main() {
vector<vector<string>> arr(26, vector<string>(7));
for (int i = 0; i < 26; i++) {
for (int j = 0; j < 7; j++) {
cin >> arr[i][j];
}
}
cin.ignore();
string sentence;
//cin >> sentence;
//输入可能有空格
getline(cin, sentence);
vector<string> words;
string word;
for (char c : sentence) {
if (isupper(c)) {
word += c;
}
else {
if (!word.empty()) {
words.push_back(word);
word.clear();
}
}
}
if (!word.empty()) {
words.push_back(word);
word.clear();
}
//输出
for (int i = 0; i < words.size(); i++) {
string& w = words[i];
for (int j = 0; j < 7; j++) {
for (int k = 0; k < w.size(); k++) {
int c = w[k] - 'A';
cout << arr[c][j];
if (k != w.size() - 1) {
cout << " ";
}
}
cout << endl;
}
if (i != words.size() - 1) {
cout << endl;
}
}
return 0;
}



182

被折叠的 条评论
为什么被折叠?



