概述
我是信阳师范刚上大二的一名学生,第一次参加CCPC河南省赛,感觉还是水平实力有限,但是我能感觉到这些题目出的很好。
E题,本身是一个签到题,但是当时写的很混乱,思路没缕清就着急开始写,着急要去AC,结果导致代码最后自己提交,WA了都不知道哪里错了,看不懂自己写的什么。(希望大神能给我们一点建议,或者指出我们的问题)
题目大概意思是:输入一个字符串;
通过删除原字符串部分字符,使新的长度为17的字符串满足一种俳句:
一.前1-5个字符相同,二.6-12个字符相同,三.12-17个字符相同
如果不满足这种俳句,则输出 none
输入:第一行 一个 n 表示字符串长度;
第二行输入字符串;
输出:如果满足条件的子序列存在,则输出它,否则输出none;
输入样例1:
11
lifeispiano
输出1:
none
输入样例2:
22
aaabaacccdccbcccaadaaa
输出2:
aaaaacccccccaaaaa
下面是我的代码,希望大佬能给我一些建议,非常感谢你们!
#include <iostream>
#include <map>
#include <algorithm>
using namespace std;
int main() {
int i, j = 0, n, k = 0, x = 0;
map<int, char>b;
char a[500];
cin >> n;
if (n >= 17) {
for (i = 0; i < n; i++) {
cin >> b[i];
a[i] = b[i];
}
sort(a, a + n);
char f[24], d = '@', d1 = '@', d2 = '@';
f[0] = a[0];
int c[24], count = 0, u = 0;
memset(c, 0, sizeof(c));
for (i = 1; i < n; i++) {
if (a[i - 1] != a[i]) {
j++;
f[j] = a[i];
}
}
j++;
for (i = 0; i < n; i++) {
for (k = 0; k <= j; k++) {
if (b[i] == f[k]) {
c[k]++;
}
}
for (x = 0; x < j; x++) {
if (((c[x] == 5) && (u == 0)) || ((c[x] == 5) && (u == 2))) {
if (u == 0) {
memset(c, 0, sizeof(c));
d = f[x];
u = 1;
}
if (u == 2) {
d2 = f[x];
count = 10;
break;
}
}
else if (c[x] == 6) {
memset(c, 0, sizeof(c));
d1 = f[x];
u = 2;
}
if (count == 10) break;
}
if (count == 10) break;
}
int p = 0, m = 0;
if ((d != '@') && (d1 != '@') && (d2 != '@')) {
for (int r = 0; r < 3; r++) {
if (r == 0) {
while (p < 5) {
cout << d;
p++;
}
p = 0;
m += 2;
}
else if (r == 1) {
while (p < 7) {
cout << d1;
p++;
}
p = 0;
}
else if (r == 2) {
while (p < 5) {
cout << d2;
p++;
}
}
}
}
else cout << "none" << endl;
}
else {
for (int yy = 0; yy < n; yy++)cin >> b[yy];
cout << "none" << endl;
}
return 0;
}
最后
以上就是跳跃苗条为你收集整理的CCPC大学生程序设计大赛河南省正式赛题目的全部内容,希望文章能够帮你解决CCPC大学生程序设计大赛河南省正式赛题目所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复