Appearance Analysis (map,字符串降维,暴力枚举,答案处理小技巧)
Appearance Analysis
分析:
让求有多少种不同的窗户,然后这个窗户是可以多次旋转的
数据才 111111111,直接暴力判断即可
考虑用 mapmapmap 来映射每一种窗户
每一个窗户都是一个二维的字符串,将二维转换成一维,扔到 mapmapmap 里映射一下
几个坑点:
每种窗户经旋转后,总共会有四种状态,每种状态要 mapmapmap 映射
注意:旋转之后,字符串的顺序一定要考虑清楚
对答案的处理
所有窗户跑一遍 mapmapmap 之后,单独考虑每个窗户,我们只知道该种窗户出现了多少次
tot=cnt1+cnt2+...tot=cnt_1+cnt_2+...tot=cnt1+cnt2+...
tottottot 为窗户总数,cnticnt_icnti 表示出现了 iii 次的窗户数量(可能不只一种窗户,也可能是两三种窗户都出现了)
故,ans=cnt1+cnt2/2+cnt3/3+...ans=cnt_1+cnt_2/2+cnt_3/3+...ans=cnt1+cnt2/2+cnt3/3+...
#include <bits/stdc++.h>
using namespace std;const int N=155;
char s[N][N];
int x[N*N],y[N*N];
map <string,int> mp;
void build(int x,int y) // 四种状态
{int ex=x,ey=y;while(s[x][ey+1] != '#') ey++;while(s[ex+1][y] != '#') ex++;string s1="";for(int i=x;i<=ex;i++){for(int j=y;j<=ey;j++){s1+=s[i][j];}}mp[s1]++; string s2="";for(int i=y;i<=ey;i++){for(int j=ex;j>=x;j--){s2+=s[j][i];}}if(s2!=s1) mp[s2]++;string s3="";for(int i=ex;i>=x;i--){for(int j=ey;j>=y;j--){s3+=s[i][j];}}if(s3!=s1 && s3!=s2) mp[s3]++;string s4="";for(int i=ey;i>=y;i--){for(int j=x;j<=ex;j++){s4+=s[j][i];}}if(s4!=s3 && s4!=s2 && s4!=s1) mp[s4]++;
}
int add(int x,int y)
{int ex=x,ey=y;while(s[x][ey+1] != '#') ey++;while(s[ex+1][y] != '#') ex++;string sr="";for(int i=x;i<=ex;i++){for(int j=y;j<=ey;j++){sr+=s[i][j];}}return mp[sr];
}
int a[N*N];
signed main()
{int n,m;cin>>n>>m;for(int i=1;i<=n;i++){cin>>s[i]+1;}int tot=0;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if((s[i][j]=='.' || s[i][j]=='+') && s[i-1][j-1]=='#' && s[i-1][j]=='#' && s[i][j-1]=='#'){x[++tot]=i; y[tot]=j; //每个窗户的左上角}}}for(int i=1;i<=tot;i++){build(x[i],y[i]);}int ans=0;for(int i=1;i<=tot;i++){int t=add(x[i],y[i]); //对每个窗户都判断一下属于哪一种a[t]++;}for(int i=1;i<N*N;i++){ans+=a[i]/i;}cout<<ans<<endl;
}
Appearance Analysis (map,字符串降维,暴力枚举,答案处理小技巧)相关推荐
- CountDownLatch 的使用 || enum 枚举使用的小技巧
CountDownLatch CountryEnum.java package thread;public enum CountryEnum {ONE(1, "齐"), TWO(2 ...
- COW(暴力枚举) + 玄神的字符串(思维题) + Duplicate Strings(字符串思维题)
'只要坚持就会成功--2022.1.22' 1.COW,这道题的大概意思就是求出一个字符串中一共有多少个COW,不要求连续. 思路: 暴力枚举,枚举每一个包含O,看这个O和前后的C,W结合能组成多少个 ...
- codeforces数学1600day6[CodeForces - 1029C多区间交+枚举,CodeForces 992C[数学公式推导],CodeForces 992B[质因数分解+暴力枚举]]
A - Maximal Intersection CodeForces - 1029C 题目大意:就是给你n个区间,这n个区间有公共的区间长度为x,现在叫你从这n个区间中删掉一个使得x最大化. 解题思 ...
- 如何从Java中的字符串值获取枚举值?
说我有一个枚举 public enum Blah {A, B, C, D } 我想找到一个字符串的枚举值,例如"A"就是Blah.A 怎么可能做到这一点? Enum.valueOf ...
- hdu 4587 TWO NODES 暴力枚举+tarjan
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4587 题意是拿掉两个点 求最多可以把整个图分成几个联通块 注意到有一个模板是可以通过找割点来快速求出 ...
- 枚举----暴力枚举
第一题 题目描述 由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成. 比如: 210 x 6 = 1260 8 x 473 = 3784 27 x 81 = 2187 都符合要求. ...
- #644 (Div. 3)F. Spy-string(暴力枚举)
题目描述 You are given n strings a1,a2,-,an: all of them have the same length m. The strings consist of ...
- 寒假集训三(暴力枚举)2020.01.02(11题)
寒假集训三(暴力枚举)id :521 Problem:A 二倍的问题 Description 给定2到15个不同的正整数,你的任务是计算这些数里面有多少个数对满足:数对中一个数是另一个数的两倍.比如给 ...
- 大一寒假培训(三)——暴力枚举及妙用
大一寒假培训(三) 经过两天的培训之后,第三天也到来了.今天讲的是暴力枚举.好像没什么可讲的(悄咪咪地说) 接下来还是今天的练习 nefu 8 二倍的问题 Description 给定2到15个不同的 ...
最新文章
- 有赞分层自动化测试实践
- 使用 Recipe 安装 SAP Commerce Cloud
- Fiori Launchpad Tile点击后跳转的调试技巧
- 去贵阳参观大数据到哪参观_您必须参观的四个世界
- This is a Blog Test
- Canvas制作的下雨动画
- LeetCode 1275. 找出井字棋的获胜者(位运算)
- mock如何为空_Mockito怎么样Mock返回值为空的方法
- php前段时间戳转字符串,JavaScript_js获取时间并实现字符串和时间戳之间的转换,废话少说,直接上代码
复制 - phpStudy...
- vs2019键盘钩子_江门网站建设:针对Web开发人员的12个最佳Visual Studio代码扩展
- IDEA安装插件IDE Eval Reset
- 离线光学字符识别(OCR)技术简介
- 【BZOJ4134】【树上博弈】【博弈论】【线段树合并】ljw和lzr的hack比赛 题解
- 语言和语义(一,什么是语言)
- less中的变量 单位问题
- SQL注入基础--判断闭合形式
- 《面朝大海,春暖花开》-海子
- opengl高级光照之延迟渲染以及光体积
- c/c++编译器配置(交叉编译重要参数)、交叉编译动态库与as配置、mk初步
- Android OpenMobileAPI、OMA、智能卡开发总结