【枚举】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 ...
随机推荐
- codeforces 1077D
题目:https://codeforces.com/contest/1077/problem/D 题意:给你一个长度为n的串,你需要在里面找到出现次数最多的长度为k的子序列(子序列中元素可重复),求这 ...
- LwIP - raw/callback API、协议栈API(sequential API)、BSD API(或者说 SOCKET API)
1.使用raw/callback API编程,用户编程的方法是向内核注册各种自定义的回调函数,回调函数是与内核实现交换的唯一方式. recv_udp, accept_function, sent_tc ...
- domReady的兼容性实现方法
一.为何要实现domReay方法? 举例: <!DOCTYPE html> <html lang="en"> <head> <meta c ...
- JS 中 call 和 apply 的理解和使用
本文受到了知乎问题 如何理解和熟练运用js中的call及apply? 的启发. obj.call(thisObj, arg1, arg2, ...); obj.apply(thisObj, [arg1 ...
- bzoj 1876 高精
首先我们知道,对于两个数a,b,他们的gcd情况有如下形式的讨论 当a为奇数,b为偶数的时候gcd(a,b)=gcd(a div 2,b) 当b为奇数,a为偶数的时候gcd(a,b)=gcd(a,b ...
- bzoj 1061 志愿者招募 费用流
详见BYV的博客,写的非常全面https://www.byvoid.com/blog/noi-2008-employee /************************************** ...
- algorithm ch6 heapsort
堆排序利用的是堆这种数据结构来对进行排序,(二叉)堆可以被视为一棵完全的二叉树,树的每个节点与数组中存放该节点的值得那个元素对应.这里使用最大堆进行排序算法设计,最大堆就是parent(i) > ...
- 如何重新签名ipa文件
http://www.cocoachina.com/bbs/read.php?tid=185963 求ipa文件修改后重新打包的方法,我已经有开发者账号了. 替换了ipa里的图片后,就无法安装了,似乎 ...
- UVALIVE 3486 Cells
通过入栈出栈顺序判断祖先关系 这里UVALIVE还 #include <map> #include <set> #include <list> #include & ...
- c 語言 控制碼
source code #include <stdio.h> int main() { char *test = "ABC\x41\n"; printf("s ...