【Gym - 101612C】【2017-2018NEERC】Consonant Fencity(状压枚举,预处理)

题干:

把26个字母分成19个辅音字母和7个元音字母,让你通过 将某些字母改为大写状态,使得字符串中连续的两个大小写状态不同的辅音字母组成的字母对数量最多,输出该状态下的字符串。注意输出的字符串中同一字母必须形态统一,也就是对于同一个字母,不能既有大写状态的,也有小写状态的。如果有多种可能的解,输出任意一种。 

解题报告:

注意到除去元音字母,还剩下19个辅音字母,这样我们第一步可以2^19枚举变换的福音字母。

接下来首先想到的是O(n)的check,但是注意到其实需要统计的信息只是相邻字母无序对而已,而无序对的种类一共19*19种。所以我们check的时候不需要跑一遍字符串,只需要统计着19*19个无序对数量即可。

总复杂度O(19 * 19 * 2^19)

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define FF first
#define SS second
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
typedef pair<int,int> PII;
const int MAX = 1e6 + 5;
const int up = 19;
char s[MAX];
int cnt[226];
int num[666][666];
int buf[2],pos[666];
bool yy[555];//是元音则为1 
//char biao[55];
int tot;
int ok[222],ansok[222];//在本轮中选还是没选 
ll ans,anssta;
int main()
{freopen("consonant.in","r",stdin);freopen("consonant.out","w",stdout);yy['a']=yy['e']=yy['i']=yy['o']=yy['u']=yy['w']=yy['y']=1;for(char ch = 'a'; ch <= 'z'; ch++) {if(yy[ch] == 1) continue;pos[ch]=tot++;}
//	printf("%d\n",tot);
//	for(int i = 0; i<tot; i++) printf("%c ",biao[i]);scanf("%s",s+1);int len = strlen(s+1);for(int i = 2; i<=len; i++) {if(s[i] == s[i-1] || yy[s[i]] || yy[s[i-1]]) continue;
//		cnt[pos[s[i]]]++;cnt[pos[s[i-1]]]++;buf[0]=pos[s[i]];buf[1]=pos[s[i-1]];if(buf[0] > buf[1]) swap(buf[0],buf[1]);num[buf[0]][buf[1]]++;//已对应到0~18 }for(int sta = 0; sta<(1<<up); sta++) {ll cur = 0;for(int bit = 0; bit<up; bit++) {if(sta & (1<<bit)) ok[bit]=1;else ok[bit]=0;}for(int i = 0; i<up; i++) {for(int j = i+1; j<up; j++) {//枚举不同的两个数 if(ok[i] + ok[j] == 1) cur += num[i][j];}}if(cur > ans) {ans = cur;for(int bit = 0; bit<up; bit++) ansok[bit] = ok[bit];}} for(int i = 1; i<=len; i++) {if(ansok[pos[s[i]]]) printf("%c",s[i] + 'A'-'a');else printf("%c",s[i]);}return 0;
}
//qqqqq

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439552.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅谈Mysql 表设计规范

本文首先探讨下数据库设计的三大范式&#xff0c;因为范式只是给出了数据库设计的原则&#xff0c;并没有告诉我们实际操作中应该怎样操作&#xff0c;应该注意什么&#xff0c;所以我们还会谈下实际工作中需要注意的具体操作问题。 三大范式 首先放出三大范式内容&#xff0c…

从零开始学视觉Transformer(1):Hello Vision Transformer

Vision Transformer打卡营分享一门很棒的 ViT 课程&#xff0c;课程详细介绍可以看这篇文章&#xff1a; 《Vision Transformer打卡营来啦&#xff01;朱欤博士带你从零玩转ViT爆款模型&#xff01;》

SQLServer中ISNULL、NULLIF和CONVERT函数

效率&#xff1a; UNION和UNION ALL关键字都是将两个结果集合并为一个&#xff0c;但这两者从使用和效率上来说都有所不同。 1、对重复结果的处理&#xff1a;UNION在进行表链接后会筛选掉重复的记录&#xff0c;Union All不会去除重复记录。 2、对排序的处理&#xff1a;Union…

一步步编写操作系统 66 浅析c库函数与系统调用1

本来说好的接下来的工作是要去“丰满”我们的内核&#xff0c;可咱们这种一步一回头的学习方式还得继续啊。其实我了解大家急切写内核的心情&#xff0c;但本书《操作系统真象还原》&#xff08;请大家支持正版&#xff09;的目的不是写一个操作系统就完事了&#xff0c;而是让…

给不会调用C++STL库中二分函数lower_bound,upper_bound,binary_search同学的一些话!

lower_bound算法返回第一个大于等于给定值所在的位置。设置两个指针start和last&#xff0c;其中start指向数组的起始位置&#xff0c;last指向数组末尾位置之后的位置。当start和last指向相同位置时循环结束。mid指向[start,last)区间的中间位置&#xff0c;当中间位置元素值大…

详解IMU标定经典论文:A Robust and Easy to Implement Method for IMU Calibration without External Equipments

本文介绍一篇 关于IMU 标定的经典论文&#xff0c;论文收录于 ICRA14&#xff0c;在论文中作者介绍了如何不适用外部设备标定 IMU 加速度和角速度偏差、尺度系数、轴偏移参数。 论文链接&#xff1a;https://readpaper.com/paper/2021503353、https://readpaper.com/paper/221…

重读经典:《Momentum Contrast for Unsupervised Visual Representation Learning》

MoCo 论文逐段精读【论文精读】这次论文精读李沐博士继续邀请了亚马逊计算机视觉专家朱毅博士来精读 Momentum Contrast&#xff08;MoCo)&#xff0c;强烈推荐大家去看本次的论文精读视频。朱毅博士和上次一样讲解地非常详细&#xff0c;几乎是逐词逐句地讲解&#xff0c;在讲…

【HRBUST - 1623】Relation(思维模拟,拆解字符串)

题干&#xff1a; 一天&#xff0c;ikki在看书的时候发现书上有个类似于家谱状的插图&#xff0c;突然ikki想到了一个有趣的现象&#xff1a;有时候用某个人一连串 的关系描述另一个人的时候&#xff0c;最后可能还是他本身。例如&#xff1a;小明的爸爸的爸爸和小明的爷爷是同…

一步步编写操作系统 67 系统调用的实现1-2 68

接上文&#xff1a; 系统调用的子功能要用eax寄存器来指定&#xff0c;所以咱们要看看有哪些系统调用啦&#xff0c;在linux系统中&#xff0c;系统调用是定义在/usr/include/asm/unistd.h文件中&#xff0c;该文件只是个统一的入口&#xff0c;指向了32位和64位两种版本。在a…

【HDU - 6662】Acesrc and Travel(树形dp,博弈dp)

题干&#xff1a; Acesrc is a famous tourist at Nanjing University second to none. During this summer holiday, he, along with Zhang and Liu, is going to travel to Hong Kong. There are nnspots in Hong Kong, and n−1n−1 bidirectional sightseeing bus routes …

一步步编写操作系统 69 汇编语言和c语言共同协作 70

由于有了上一节的铺垫&#xff0c;本节的内容相对较少&#xff0c;这里给大家准备了两个小文件来实例演示汇编语言和c语言相互调用。 会两种不同语言的人&#xff0c;只是掌握了同一件事物的两种表达方式。人在学习一种新语言时&#xff0c;潜意识里是建立了语言符号与事物形象…

一步步编写操作系统 71 直接操作显卡,编写自己的打印函数71-74

一直以来&#xff0c;我们在往屏幕上输出文本时&#xff0c;要么利用bios中断&#xff0c;要么利用系统调用&#xff0c;这些都是依赖别人的方法。咱们还用过一个稍微有点独立的方法&#xff0c;就是直接写显存&#xff0c;但这貌似又没什么含量。如今我们要写一个打印函数了&a…

【CodeForces - 208C 】Police Station(单源最短路条数,起点终点建图,枚举顶点)

题干&#xff1a; The Berland road network consists of n cities and of m bidirectional roads. The cities are numbered from 1 to n, where the main capital city has number n, and the culture capital — number 1. The road network is set up so that it is possi…