Looksery Cup 2015 A. Face Detection

1.题目描述:点击打开链接

2.解题思路:本题是一道简单的搜索题,要求找有多少个2*2的方格,其中的四个字母可以拼成单词face。然而我的写法显得比较麻烦,用了四个标记分别判断四个字符是否出现过。其实简便写法是可以将它们有序化,按照字母表顺序排个序,,如果最后等于“acef”那么cnt++。随后附上参考代码。

3.代码:

#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<algorithm>#include<string>#include<sstream>#include<set>#include<vector>#include<stack>#include<map>#include<queue>#include<deque>#include<cstdlib>#include<cstdio>#include<cstring>#include<cmath>#include<ctime>#include<functional>using namespace std;typedef long long ll;typedef unsigned long long ull;#define me(s) memset(s,0,sizeof(s))#define For(i,n) for(int i=0;i<(n);i++)#define pb push_back#define sz size#define clr clear#define F(a,b) for(int i=a;b;i++)const int N=55;char s[N][N];int n,m;bool ok(int r,int c){int o1,o2,o3,o4;o1=o2=o3=o4=0;for(int i=0;i<2;i++)for(int j=0;j<2;j++)if(s[r+i][c+j]=='f')o1=1;else if(s[r+i][c+j]=='a')o2=1;else if(s[r+i][c+j]=='c')o3=1;else if(s[r+i][c+j]=='e')o4=1;if(o1&&o2&&o3&&o4)return true;return false;}int main(){ // freopen("t.txt","r",stdin);while(~scanf("%d%d ",&n,&m)){memset(s,'\0',sizeof(s));for(int i=0;i<n;i++)gets(s[i]);int cnt=0;for(int i=0;i<n-1;i++)for(int j=0;j<m-1;j++)if(ok(i,j))cnt++;printf("%d\n",cnt);}return 0;}

参考代码:

#include <bits/stdc++.h>using namespace std;char s[777][777];int main() { int h, w; scanf("%d %d", &h, &w); for (int i = 0; i < h; i++) {scanf("%s", s[i]); } int ans = 0; for (int i = 0; i < h – 1; i++) {for (int j = 0; j < w – 1; j++) {string z = "";z += s[i][j];z += s[i][j + 1];z += s[i + 1][j];z += s[i + 1][j + 1];sort(z.begin(), z.end());//利用string的特性,方便排序if (z == "acef") {ans++;}} } printf("%d\n", ans); return 0;}

千万个不眠的夜里,你一直让我感动,只是因为相信有个人会爱我一生一世。

Looksery Cup 2015 A. Face Detection

相关文章:

你感兴趣的文章:

标签云: