博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BestCoder37 1001.Rikka with string 解题报告
阅读量:5257 次
发布时间:2019-06-14

本文共 2470 字,大约阅读时间需要 8 分钟。

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5202

题目意思:给出一个长度为 n,只有小写字母和 ? 组成的字符串。现在需要向 ? 的位置填小写字母,使得最终得到的字符串是字典序最小且不是回文串。如果怎么填都不符合结果,则输出 "QwQ"。

  首先我大体的解决思路是正确的。

  先考虑最简单的情况,有可能整个字符串都不含 “?”。那么如果它不是回文串,就符合题目条件,否则输出"QwQ"

  然后考虑有 “?” 的情况。我单纯地把除最后一个 ? 的位置以外的所有 ? 都替换成 a,然后最后一个 ? 暴力试探所有小写字母。如果找不到符合条件的就输出"QwQ"。 这种做法忽略了一种情况。如果字符串是这样 ????aaa,就会无解;但是其实是有解的,即应该输出 aabaaaa 。所以正确的做法还需要考虑倒数第二个?的位置!!!

  最后一点就是只有一个 ? 的时候,需要特判一下。

     (代码有点长,但非常好理解哦~~~~~)手痒痒,又偷偷玩了下

1 #include 
2 #include
3 #include
4 #include
5 using namespace std; 6 7 int n; 8 const int maxn = 5000 + 5; 9 char s[maxn];10 11 bool check(char s[])12 {13 bool flag = true;14 for (int i = 0; i < n/2; i++) {15 if (s[i] != s[n-i-1]) {16 flag = false;17 break;18 }19 }20 return flag;21 }22 23 int main()24 {25 #ifndef ONLINE_JUDGE26 freopen("in.txt", "r", stdin);27 #endif // ONLINE_JUDGE28 29 while (scanf("%d", &n) != EOF) {30 scanf("%s", s);31 int l = -1; // 初始不能为0,因为可能第一个位置是 ?32 // 有问号代表可能有解33 for (int i = 0; i < n; i++) {34 if (s[i] == '?') {35 l = i; // 找出最右边第一次出现的问号36 }37 }38 // 没有问号的情况39 if (l == -1) {40 printf("%s\n", check(s) ? "QwQ" : s);41 }42 // 有问号43 else {44 // 记下倒数第二个 ? 的位置45 int pos = -1;46 // 除了最后的问号,其他问号都填 a47 for (int i = 0; i < l; i++) {48 if (s[i] == '?') {49 pos = i;50 s[i] = 'a';51 }52 }53 bool flag = false;54 for (int i = 0; i <= 25; i++) {55 // 最后的问号填数,使得不是回文串56 s[l] = i + 'a';57 if (!check(s)) {58 printf("%s\n", s);59 flag = true;60 break;61 }62 }63 // 倒数第二个问号的位置不填 a64 if (!flag) {65 if (pos == -1) // 排除只有一个问号的情况,? 可能在正中间66 printf("QwQ\n");67 else {68 s[l] = 'a';69 s[pos] = 'b';70 printf("%s\n", check(s)? "QwQ" : s);71 }72 }73 } // end else74 }75 return 0;76 }

 

     

   

转载于:https://www.cnblogs.com/windysai/p/4437405.html

你可能感兴趣的文章
TCP三次握手详解及释放连接过程
查看>>
gnome3
查看>>
图解iPhone开发新手教程
查看>>
zedboard 驱动理解
查看>>
求a的n次方
查看>>
尚硅谷资料库
查看>>
ios判断app是否有打开相机的权限
查看>>
Centos7LDAP LDAPadmin的完整部署记录(改良版,其它文档太多坑)
查看>>
B. Trees in a Row(cf)
查看>>
PowerShell导出场中的WSP包到本地
查看>>
nodejs下载图片到本地,根据百度图片查找相应的图片,通过nodejs保存到本地文件夹...
查看>>
使用Jquery解析Json基础知识
查看>>
SQLserver锁和事务隔离级别的比较与使用(转)
查看>>
Problem B: 分数类的类型转换
查看>>
python-zmail发送邮件
查看>>
RabbitMQ-rabbitmqctl和插件使用(四)
查看>>
Scrapy中的反反爬、logging设置、Request参数及POST请求
查看>>
吴裕雄 Bootstrap 前端框架开发——Bootstrap 排版:设定单词首字母大写
查看>>
C程序-进程内存结构分析
查看>>
bzero()函数
查看>>