761C Dasha and Passwordtia
2017-02-10 16:16
288 查看
题目链接:
http://codeforces.com/problemset/problem/761/C题解:
题意大致为:给出一个n*m大小的由字符组成的矩阵,问由这些字符在满足某些条件下构成密码的最小的步数。条件如下:
1.密码中至少有一个数字。
2.密码中至少有一个小写的字母。
3.密码中需要含有“#”或“*”或 “&”。
这道题直接暴力就可以做的,但是暴力的时候要使用贪心的思路去做就行了。
代码:
#include <cmath> #include <cstdio> #include <vector> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int maxn = 2500+10; #define met(a,b) memset(a,b,sizeof(a)) #define inf 1<<26 typedef long long ll; #define step1(x) x>='0'&&x<='9' #define step2(x) x>='a'&&x<='z' #define step3(x) x=='&'||x=='*'||x=='#' int num1[maxn],num2[maxn],num3[maxn]; int n,m; string s; int main() { while(cin>>n>>m) { for(int i=0;i<n;i++) { cin>>s; num1[i]=num2[i]=num3[i]=inf; for(int j=0;j<m;j++) { int temp=min(j,m-j); if(step1(s[j])) num1[i]=min(num1[i],temp); else if(step2(s[j])) num2[i]=min(num2[i],temp); else if(step3(s[j])) num3[i]=min(num3[i],temp); } } int ans=inf; for(int i=0;i<n;i++) for(int j=0;j<n;j++) for(int k=0;k<n;k++) { if(i==j||j==k||k==i) continue; ans=min(ans,num1[i]+num2[j]+num3[k]); } cout<<ans <<endl; } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C++的template模板中class与typename关键字的区别分析
- C与C++之间相互调用实例方法讲解