题意1:

给你一个由小写字母构成的字符串s,你可以其中某些字符变成大写字母。如果s中有字母a,你如果想把a变成大写,那s字符串中的每一个a都要变成A

最后你需要要出来所有的字符对,s[i]和s[i-1]需要是辅音字母,且s[i]和s[i-1]中需要一个字母大写另一个小写。a、e、i、o、u、w、y这七个字母是元音

输出最大字符对数量

题解1:

首先预处理一下s字符串中字符相邻的数量,就是记录w[s[i-1]][s[i]]的数量

之后二进制枚举所有字母变成大写的情况。

然后枚举这个字母变成大写之后和其他字母组成成为字符对的数量。也就是结果加上w[x][k](x是变成大写的字母,k是枚举x和那个字母组成字符对)

那么如果b和c在s字符串中相邻了,然后b和c都变成大写怎么处理?

枚举到b变成大写的时候,x='b',当k='c'这个时候需要加上w[x][k]。

到下一次枚举到c的时候,x='c',当k='b'我们判断k是否变成了大写,如果变了,就减去w[x][k]

AC代码:

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <vector>
using namespace std;
typedef long long ll;
const int maxn = 1e6 + 5;
const int mod = 1000000007;
char s[maxn];
int w[150][150],que[150],vis[150];
int main()
{
freopen("consonant.in","r",stdin);
freopen("consonant.out","w",stdout);
scanf("%s",s);
int len=strlen(s);
if(len==1)
{
printf("%s\n",s);
return 0;
}
for(int i=1;i<len;++i)
{
w[s[i-1]][s[i]]++;
}
int pos=0;
for(int i='a';i<='z';++i)
{
if(i=='a' || i=='e' || i=='o' || i=='u' || i=='i' || i=='w' || i=='y')
continue;
que[pos++]=i;
}
//printf("%d***\n",pos);
int ans=0,flag=0;
for(int i=0;i<(1<<pos);++i)
{
int sum=0;
memset(vis,0,sizeof(vis));
for(int j=0;j<pos;++j)
{
if((1<<j)&i)
{
for(int k='a';k<='z';++k)
{
if(k=='a' || k=='e' || k=='o' || k=='u' || k=='i' || k=='w' || k=='y' || k==que[j])
continue;
if(vis[k])
{
// if(i==1026)
// {
// printf("********%c %c %d %d\n",k,que[j],w[k][que[j]],w[que[j]][k]);
// }
sum-=w[k][que[j]];
sum-=w[que[j]][k];
}
else
{
// if(i==1026)
// {
// printf("%c %c %d %d\n",k,que[j],w[k][que[j]],w[que[j]][k]);
// }
sum+=w[k][que[j]];
sum+=w[que[j]][k];
}
}
vis[que[j]]=1;
}
}
if(ans<sum)
{
ans=sum;
flag=i;
}
// printf("%d***\n",sum);
// system("pause");
}
memset(vis,0,sizeof(vis));
for(int i=0;i<pos;++i)
{
if((1<<i)&flag)
{
vis[que[i]]=1;
}
}
for(int i=0;i<len;++i)
{
if(vis[s[i]])
printf("%c",s[i]-32);
else printf("%c",s[i]);
}
printf("\n");
return 0;
}

题意2:

按顺序给你n个点,表示第i个点和第i-1个点相连,第1个点和第n个点相连。

题目保证所有连线和x或者y轴平行。让你输出n个点构成的图形看不到区域的长度

题解:

首先设这n个点构成的图形周长为x,后面使用x-大矩形周长就是答案

大矩形周长:就是把图形补全之后的外层大矩形的周长

代码:

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <vector>
using namespace std;
typedef long long ll;
const int maxn = 1e3 + 5;
const int INF=0x3f3f3f3f;
const int mod = 1000000007;
struct Node
{
int x,y;
}node[maxn];
int main()
{
freopen("intel.in","r",stdin);
freopen("intel.out","w",stdout);
int n;
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
scanf("%d%d",&node[i].x,&node[i].y);
}
int ans=0,minnx=INF,minny=INF,maxxx=0,maxxy=0;
node[n+1]=node[1];
for(int i=2;i<=n+1;++i)
{
minnx=min(minnx,node[i].x);
minny=min(minny,node[i].y);
maxxx=max(maxxx,node[i].x);
maxxy=max(maxxy,node[i].y);
if(node[i-1].x==node[i].x)
{
ans+=abs(node[i].y-node[i-1].y);
}
else if(node[i-1].y==node[i].y)
{
ans+=abs(node[i].x-node[i-1].x);
}
}
printf("%d\n",ans-((maxxx-minnx)*2+(maxxy-minny)*2));
return 0;
}
/*
10
1 1
6 1
6 4
3 4
3 3
5 3
5 2
2 2
2 3
1 3
*/

Consonant Fencity Gym - 101612C 暴力二进制枚举 Intelligence in Perpendicularia Gym - 101612I 思维的更多相关文章

  1. Codeforces Round #272 (Div. 2) B. Dreamoon and WiFi (暴力二进制枚举)

    题意:给你一个只含\(+\)和\(-\)的字符串,统计它的加减和,然后再给你一个包含\(+,-,?\)的字符串,其中\(?\)可以表示为\(+\)或\(-\),问有多少种情况使得第二个字符串的加减和等 ...

  2. 【二进制枚举+LCS】Card Hand Sorting

    [二进制枚举+LCS]Card Hand Sorting 题目描述 When dealt cards in the card game Plump it is a good idea to start ...

  3. 【枚举】Consonant Fencity @upcexam5110

    时间限制: 3 Sec 内存限制: 512 MB 题目描述 There are two kinds of sounds in spoken languages: vowels and consonan ...

  4. Gym - 100712G Heavy Coins(二进制枚举)

    https://vjudge.net/problem/Gym-100712G 题意:给出n枚不同价值的硬币和一个总价S,现在要选择尽量多的硬币来大于等于S,要求是比如说现在选择的硬币的总和为sum,那 ...

  5. Tomb Raider HihoCoder - 1829 (二进制枚举+暴力)(The 2018 ACM-ICPC Asia Beijing First Round Online Contest)

    Lara Croft, the fiercely independent daughter of a missing adventurer, must push herself beyond her ...

  6. Card Hand Sorting 二进制枚举暴力

    这个题其实由于只有4种花色的,那么每种花色排列的顺序,也不过是4!种,然后对于每种花色内部到底是升序还是降序,其实也可以直接暴力,一共也就4!*2^4种情况,然后直接进行排序就可以了,但是我们如何计算 ...

  7. UVA12113-Overlapping Squares(二进制枚举)

    Problem UVA12113-Overlapping Squares Accept:116  Submit:596 Time Limit: 3000 mSec  Problem Descripti ...

  8. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 B Tomb Raider 【二进制枚举】

    任意门:http://hihocoder.com/problemset/problem/1829 Tomb Raider 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 L ...

  9. Atcoder beginner contest 249 C-Just K(二进制枚举)

    题目大意:给你N个字符串,你可以从中选择任意数量的字符串,请统计在你的字串中,相同字母出现次数正好为K次的字母数.数据保证出现的字母都是小写字母. 1≤N≤15 1 ≤K≤N 一开始读题的时候读错了, ...

随机推荐

  1. SpringBoot项目,如何优雅的把接口参数中的空白值替换为null值?

    问题发生 我们公司代码生成的时候,查询列表统一都是使用了setEntity() ,查询写法如下: public List<BasReservoirArea> selectList(BasR ...

  2. 【Redis3.0.x】发布订阅

    Redis3.0.x 发布订阅 基本命令 SUBSCRIBE channel [channel...] 订阅给定的一个或多个频道 PSUBSCRIBE pattern [pattern...] 订阅符 ...

  3. Linux学习笔记 | 配置Samba

    Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通 ...

  4. Linux学习笔记 | 配置ssh

    目录: SSH的必要性 将默认镜像源修改为清华镜像源 Linux安装ssh软件 使用putty软件实现ssh连接 Windows下安装winscp SSH的必要性 一般服务器都位于远程而非本地,或者及 ...

  5. mac安装Navicat Premium Mac 12 破解版

    参考:https://www.cnblogs.com/lyfstorm/p/11123159.html 激活后:

  6. linux服务开机自启动&注册系统服务

    首先先看下linux系统开机启动顺序,如下图 对,要解决Linux CentOS 和 Red Hat Linux 系统中设置服务自启动有两种方式,就是从图中圈出的两个步骤下手. 一.修改 /etc/r ...

  7. ORA-32004解决办法

    ORA-32004 解释是: 产生问题的原因是一个过时的参数,这个参数是早在8i,9i中使用的,在11g中已经废掉了 这个参数就是pfile中的*.sql_trace 用spfile 生成一个pfil ...

  8. freopen函数总结

    函数原型: freopen(const char * __restrict__ _Filename,const char * __restrict__ _Mode,FILE * __restrict_ ...

  9. mysql—if函数

    在mysql中if()函数的具体语法如下:IF(expr1,expr2,expr3),如果expr1的值为true,则返回expr2的值,如果expr1的值为false,则返回expr3的值. 开始实 ...

  10. Python3.9的http.client.py下的HTTPMessage类中的方法getallmatchingheaders的bug修复建议

    在官方网站已经提交相关issue,不过目前看好像还没有修复.具体的bug位置为: http文件夹下的client.py文件,代码位置为:类HTTPMessage下的方法getallmatchinghe ...