博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【枚举】Codeforces Round #394 (Div. 2) C. Dasha and Password
阅读量:5846 次
发布时间:2019-06-18

本文共 5180 字,大约阅读时间需要 17 分钟。

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

三重循环枚举将哪三个fix string作为数字、字母和符号位。记下最小的值就行了。

预处理之后这个做法应该是O(n^3)的,当然完全足够。不预处理是O(n^3*m)的,也够。

我写了一个O(n^2+n*m)的分类讨论贪心做法……蜜汁错,容我查一下。

现在查出个错,交了一下在in queue……容我明天看看对不对。

如果对的话,这题的加强版今年留作趣味赛题吧,嘿嘿嘿……

UPDATE:果然过了……我就是傻逼

#include
#include
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;}

转载于:https://www.cnblogs.com/autsky-jadek/p/6361889.html

你可能感兴趣的文章
nginx 自动备份,日志切割脚本
查看>>
Linux gcc for 循环中 i=i++ 会造成死循环问题及 ++i / i++ 汇编分析
查看>>
IOS8插件Demo(Today Extension)
查看>>
Linux 常用命令
查看>>
reflect
查看>>
URL与ASCII
查看>>
Windows Server 2008防火墙配置
查看>>
linux常用命令小记
查看>>
Jetty9安装部署
查看>>
ISA2004防火墙配置教程
查看>>
bash的变量类别,引号
查看>>
LAMP搭建5:安装discuz
查看>>
java 操作redis基本工具类
查看>>
nagios监控失败报错It appears as though you do not have..
查看>>
solr 与mysql的对应查询 solr统计
查看>>
我的友情链接
查看>>
oracle 11g RAC 的一些基本概念(三)
查看>>
如何画出一张合格的技术架构图?
查看>>
K8s中Pod健康检查源代码分析
查看>>
全面剖析 Knative Eventing 0.6 版本新特性
查看>>