【枚举】Codeforces Round #394 (Div. 2) C. Dasha and Password
纪念死去的智商(虽然本来就没有吧……)
三重循环枚举将哪三个fix string作为数字、字母和符号位。记下最小的值就行了。
预处理之后这个做法应该是O(n^3)的,当然完全足够。不预处理是O(n^3*m)的,也够。
我写了一个O(n^2+n*m)的分类讨论贪心做法……蜜汁错,容我查一下。
现在查出个错,交了一下在in queue……容我明天看看对不对。
如果对的话,这题的加强版今年留作趣味赛题吧,嘿嘿嘿……
UPDATE:果然过了……我就是傻逼
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m;
char a[55][55];
int dis[55][4],type[55];
int main()
{
// freopen("c.in","r",stdin);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i)
scanf("%s",a[i]+1);
for(int i=1;i<=n;++i)
{
if(a[i][1]>='a' && a[i][1]<='z')
type[i]=1;
else if(a[i][1]>='0' && a[i][1]<='9')
type[i]=2;
else
type[i]=3;
dis[i][1]=dis[i][2]=dis[i][3]=10000000;
for(int j=2;j<=m;++j)
if(a[i][j]>='a' && a[i][j]<='z')
{
if(type[i]!=1)
dis[i][1]=min(dis[i][1],min(j-1,m-j+1));
}
else if(a[i][j]>='0' && a[i][j]<='9')
{
if(type[i]!=2)
dis[i][2]=min(dis[i][2],min(j-1,m-j+1));
}
else if(type[i]!=3)
dis[i][3]=min(dis[i][3],min(j-1,m-j+1));
}
bool flag=1;
for(int i=1;i<=n;++i)
if(type[i]!=1)
{
flag=0;
break;
}
if(flag)
{
int ans=10000000;
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
if(i!=j)
ans=min(ans,dis[i][2]+dis[j][3]);
printf("%d\n",ans);
return 0;
} flag=1;
for(int i=1;i<=n;++i)
if(type[i]!=2)
{
flag=0;
break;
}
if(flag)
{
int ans=10000000;
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
if(i!=j)
ans=min(ans,dis[i][1]+dis[j][3]);
printf("%d\n",ans);
return 0;
} flag=1;
for(int i=1;i<=n;++i)
if(type[i]!=3)
{
flag=0;
break;
}
if(flag)
{
int ans=10000000;
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
if(i!=j)
ans=min(ans,dis[i][1]+dis[j][2]);
printf("%d\n",ans);
return 0;
} flag=1;
for(int i=1;i<=n;++i)
if(type[i]==1)
{
flag=0;
break;
}
if(flag)
{
int ans=10000000;
int cnt[4]={0};
for(int i=1;i<=n;++i)
++cnt[type[i]];
if(cnt[2]==1)
{
int id;
for(int i=1;i<=n;++i)
if(type[i]==2)
{
id=i;
break;
}
for(int i=1;i<=n;++i)
if(type[i]==3)
ans=min(ans,dis[i][1]);
int tmp=10000000;
for(int i=1;i<=n;++i)
if(type[i]==3)
tmp=min(tmp,dis[i][2]);
ans=min(ans,tmp+dis[id][1]);
}
else if(cnt[3]==1)
{
int id;
for(int i=1;i<=n;++i)
if(type[i]==3)
{
id=i;
break;
}
for(int i=1;i<=n;++i)
if(type[i]==2)
ans=min(ans,dis[i][1]);
int tmp=10000000;
for(int i=1;i<=n;++i)
if(type[i]==2)
tmp=min(tmp,dis[i][3]);
ans=min(ans,tmp+dis[id][1]);
}
else
{
for(int i=1;i<=n;++i)
ans=min(ans,dis[i][1]);
}
printf("%d\n",ans);
return 0;
} flag=1;
for(int i=1;i<=n;++i)
if(type[i]==2)
{
flag=0;
break;
}
if(flag)
{
int ans=10000000;
int cnt[4]={0};
for(int i=1;i<=n;++i)
++cnt[type[i]];
if(cnt[1]==1)
{
int id;
for(int i=1;i<=n;++i)
if(type[i]==1)
{
id=i;
break;
}
for(int i=1;i<=n;++i)
if(type[i]==3)
ans=min(ans,dis[i][2]);
int tmp=10000000;
for(int i=1;i<=n;++i)
if(type[i]==3)
tmp=min(tmp,dis[i][1]);
ans=min(ans,tmp+dis[id][2]);
}
else if(cnt[3]==1)
{
int id;
for(int i=1;i<=n;++i)
if(type[i]==3)
{
id=i;
break;
}
for(int i=1;i<=n;++i)
if(type[i]==1)
ans=min(ans,dis[i][2]);
int tmp=10000000;
for(int i=1;i<=n;++i)
if(type[i]==1)
tmp=min(tmp,dis[i][3]);
ans=min(ans,tmp+dis[id][2]);
}
else
{
for(int i=1;i<=n;++i)
ans=min(ans,dis[i][2]);
}
printf("%d\n",ans);
return 0;
} flag=1;
for(int i=1;i<=n;++i)
if(type[i]==3)
{
flag=0;
break;
}
if(flag)
{
int ans=10000000;
int cnt[4]={0};
for(int i=1;i<=n;++i)
++cnt[type[i]];
if(cnt[1]==1)
{
int id;
for(int i=1;i<=n;++i)
if(type[i]==1)
{
id=i;
break;
}
for(int i=1;i<=n;++i)
if(type[i]==2)
ans=min(ans,dis[i][3]);
int tmp=10000000;
for(int i=1;i<=n;++i)
if(type[i]==2)
tmp=min(tmp,dis[i][1]);
ans=min(ans,tmp+dis[id][3]);
}
else if(cnt[2]==1)
{
int id;
for(int i=1;i<=n;++i)
if(type[i]==2)
{
id=i;
break;
}
for(int i=1;i<=n;++i)
if(type[i]==1)
ans=min(ans,dis[i][3]);
int tmp=10000000;
for(int i=1;i<=n;++i)
if(type[i]==1)
tmp=min(tmp,dis[i][2]);
ans=min(ans,tmp+dis[id][3]);
}
else
{
for(int i=1;i<=n;++i)
ans=min(ans,dis[i][3]);
}
printf("%d\n",ans);
return 0;
} puts("0");
return 0;
}
【枚举】Codeforces Round #394 (Div. 2) C. Dasha and Password的更多相关文章
- Codeforces Round #394 (Div. 2) C. Dasha and Password —— 枚举
题目链接:http://codeforces.com/problemset/problem/761/C C. Dasha and Password time limit per test 2 seco ...
- Codeforces Round #394 (Div. 2) C. Dasha and Password 暴力
C. Dasha and Password 题目连接: http://codeforces.com/contest/761/problem/C Description After overcoming ...
- Codeforces Round #394 (Div. 2) C. Dasha and Password
C. Dasha and Password time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- Codeforces Round #394 (Div. 2) C. Dasha and Password(简单DP)
C. Dasha and Password time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- Codeforces Round #394 (Div. 2) C.Dasha and Password(暴力)
http://codeforces.com/contest/761/problem/C 题意:给出n个串,每个串的初始光标都位于0(列)处,怎样移动光标能够在凑出密码(每个串的光标位置表示一个密码的字 ...
- Codeforces Round #394 (Div. 2) E. Dasha and Puzzle(分形)
E. Dasha and Puzzle time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Codeforces Round #394 (Div. 2) B. Dasha and friends 暴力
B. Dasha and friends 题目连接: http://codeforces.com/contest/761/problem/B Description Running with barr ...
- Codeforces Round #394 (Div. 2) A. Dasha and Stairs 水题
A. Dasha and Stairs 题目连接: http://codeforces.com/contest/761/problem/A Description On her way to prog ...
- Codeforces Round #394 (Div. 2) E. Dasha and Puzzle 构造
E. Dasha and Puzzle 题目连接: http://codeforces.com/contest/761/problem/E Description Dasha decided to h ...
随机推荐
- TCP ------ TCP创建服务器中出现的套接字
在服务器端,socket()返回的套接字用于监听(listen)和接受(accept)客户端的连接请求.这个套接字不能用于与客户端之间发送和接收数据. accept()接受一个客户端的连接请求,并返回 ...
- java程序在centos7里面开机自启动
1.我们先来个简单的start,status,stop程序: [root@localhost ~]# cat /home/tomcat/jarservice.sh #!/bin/bashCU_PID= ...
- 使用mysqldump命令备份恢复MySQL数据库
1.各种用法说明 A. 最简单的用法: mysqldump -uroot -pPassword [database name] > [dump file] 上述命令将指定数据库备份到某dump文 ...
- mpvue基本使用
## 什么是mpvue ## - 美团开发使用vue语法开发小程序的前端框架 - 适用于vue语法开发 - 会调用部分小程序API ## 创建mpvue项目 ## 1. 必须安装node.js 2. ...
- 自己申请了苹果的ID号,如何输入到平板上,从而换掉原先的其他账号呢?
刚买了Ipad平板电脑,一直是用商家给我设置的ID,但是时间一长,我希望用自己的ID来玩我的平板,便于下载程序,更新程序,不用每次去问人家密码是多少. 申请IPAD ID 的网站是:http://ww ...
- MySQL 之 foreign key
前段回顾 create table 表名( 字段名1 类型[(宽度) 约束条件], 字段名2 类型[(宽度) 约束条件], 字段名3 类型[(宽度) 约束条件] ); #解释: 类型:使用限制字段必须 ...
- js 触发LinkButton点击事件,执行后台方法
页面 <asp:LinkButton ID="lbtButton" runat="server" CssClass="lbtButton&qu ...
- [ 总结 ] Linux kickstart 无人值守安装系统构建过程
环境:Vmare + Linux虚拟机 注意:网卡桥接
- FluentValidation具体使用案例
可以使用NuGet 添加类库 下面是程序: using FluentValidation; using System; using System.Linq; namespace TestFluen ...
- 分析函数调用堆栈的原理和Delphi实现
来自:http://blog.163.com/liuguang_123/blog/static/816701920105262543890/ ----------------------------- ...