题意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. Centos 6.5 Rabbitmq 安装和集群,镜像部署

    centos 6.5 rabbitmq 安装和集群,镜像部署 安装erlang: yum install gcc glibc-devel make ncurses-devel openssl-deve ...

  2. 什么是xss攻击

    概述: XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器 执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列 表,然后向联 ...

  3. 简易双色球dome分享

    代码如下: <style type="text/css"> div {font-weight: bold;text-align: center;} .tone{widt ...

  4. kafka项目经验之如何进行Kafka压力测试、如何计算Kafka分区数、如何确定Kaftka集群机器数量

    @ 目录 Kafka压测 Kafka Producer(生产)压力测试 Kafka Consumer(消费)压力测试 计算Kafka分区数 Kafka机器数量计算 Kafka压测 用Kafka官方自带 ...

  5. SuperUpdate.sh 一键更换Linux软件源脚本

    一.前言 有时候会遇到 Linux 的源更新速度非常的缓慢,特别是在国内使用默认的源,因为国内的网络环境,经常会出现无法更新,更新缓慢的情况.在这种情况下,更换一个更适合或者说更近,更快的软件源,会为 ...

  6. Tomcat窗口标题,中文乱码解决方法

    工作中,或多或少的原因,一台服务器中需要同时运行多个Tomcat服务(针对一台服务器如何同时运行多个Tomcat的配置,这里不做论述,百度很多),为了便于区分各个Tomcat的功能,通常会选择修改to ...

  7. 2021年Web开发的7大趋势

    技术发展日新月异,所以 Web 开发人员也需要及时了解行业最新的发展趋势. 全球有超过 17.4 亿个网站.在每一个细分领域都有无数企业争夺搜索引擎的排名前列位置.开发人员应该了解和发现更多创新的 W ...

  8. NodeJS入门学习教程

    一.概念 1.什么是nodejs Node.js是JavaScript 运行时环境,通俗易懂的讲,Node.js是JavaScript的运行平台 Node.js既不是语言,也不是框架,它是一个平台 2 ...

  9. okhttp踩坑

    ResponseBody.string()   平常我们用的客户端http调用工具一般是RestTemplate,HttpClient,okhttp,以前使用过前两者,没咋接触过okhttp,我看公司 ...

  10. MongoTemplate聚合(一)$lookup

    mongodb   最近入职了新的公司,新公司统一使用的mongodb,es等非关系型数据库.以前对es有一些了解,其实就是灵活的文档类型结构,不受限于关系型数据库的那种字段唯一确定的"死板 ...