纪念死去的智商(虽然本来就没有吧……)

三重循环枚举将哪三个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的更多相关文章

  1. 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 ...

  2. Codeforces Round #394 (Div. 2) C. Dasha and Password 暴力

    C. Dasha and Password 题目连接: http://codeforces.com/contest/761/problem/C Description After overcoming ...

  3. 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 ...

  4. 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 ...

  5. Codeforces Round #394 (Div. 2) C.Dasha and Password(暴力)

    http://codeforces.com/contest/761/problem/C 题意:给出n个串,每个串的初始光标都位于0(列)处,怎样移动光标能够在凑出密码(每个串的光标位置表示一个密码的字 ...

  6. 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 ...

  7. Codeforces Round #394 (Div. 2) B. Dasha and friends 暴力

    B. Dasha and friends 题目连接: http://codeforces.com/contest/761/problem/B Description Running with barr ...

  8. 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 ...

  9. 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 ...

随机推荐

  1. boost 文件操作

    void testFileSystem() { boost::filesystem::path path("/test/test1"); //初始化 boost::filesyst ...

  2. eclipse安装反编译插件jadclipse

    下载jadClipse地址: 目的:将一些封装的jar或者sdk可以查看源代码 链接: http://pan.baidu.com/s/1kTN4TPd  提取码: 3fvd 将net.sf.jadcl ...

  3. region xx not deployed on any region server

    ERROR: Region { meta => month_hotstatic,860010-2288000000_201405_5_exit_00000047486,1400144486405 ...

  4. es6+最佳入门实践(12)

    12.class基础用法和继承 12.1.class基础语法 在es5中,面向对象我们通常写成这样 function Person(name,age) { this.name = name; this ...

  5. 组合数学--Polya 原理及典型应用

    Redfield-Polya (Pólya enumeration theorem,简称PET)定理是组合数学理论中最重要的定理之一.自从 1927 年 Redfield 首次运用 group red ...

  6. 汕头市队赛 SRM 06 C 秀恩爱

    C 秀恩爱 SRM 06 背景&&描述         KPM坐在直升机上俯瞰小渔村景象.         渔村可看作二维平面,密密麻麻地到处都是单身狗,KPM当前所在坐标为(sx,s ...

  7. #学习方法2打印为空,说明#延迟加载#解决方案:将nameField等设置改在viewDidLoad中设置

    #学习方法#error调试#NSLog调试之无法进行数据传输,Edit无法现实之前编辑 的内容             https://www.evernote.com/shard/s227/sh/c ...

  8. 河南省第十届省赛 Binary to Prime

    题目描述: To facilitate the analysis of  a DNA sequence,  a DNA sequence is represented by a binary  num ...

  9. 标签 JLable 类

    标签JLable上可以添加图像,当鼠标停留在标签上时,可以显示一段提示文字. package first; import javax.swing.*; import java.awt.*; impor ...

  10. jQuery获取表格隐藏域与ajax请求数据结合显示详情

    0.表格样式