Topcoder TheContest
来源:互联网 发布:unity2d编程 编辑:程序博客网 时间:2024/06/05 11:16
首先可以转变思路,将A队每个人【也就是返回值里每个string】看成一次匹配,匹配总共进行
如果
#include<algorithm>#include<string>#include<vector>#include<iostream>using namespace std;const int maxn=55;class TheContest{ int map[maxn][maxn],f[maxn],vis[maxn],cnt[maxn],ans[maxn],n,m,t,l;private: char toc(int x) { if (x<=9) return x+'0'; if (x<=35) return x-10+'A'; return x-36+'a'; } int dfs1(int u) { if (vis[u]) return 0; vis[u]=1; for (int v=1;v<=t;v++) if (map[u][v]&&(!f[v]||dfs1(f[v]))) { f[v]=u; return 1; } return 0; } int dfs2(int u,int from) { if (vis[u]) return 0; vis[u]=1; for (int v=1;v<=t;v++) if (map[u][v]&&(!f[v]||f[v]==from||(f[v]>from&&dfs2(f[v],from)))) { f[v]=u; return 1; } return 0; }public: vector<string> getSchedule(int N,int M) { vector<string> ret; ret.clear(); string s; n=N; m=M; t=max(n,m); for (int i=1;i<=m;i++) for (int j=1;j<=t;j++) map[i][j]=1; for (int K=1;K<=n;K++) { for (int i=1;i<=t;i++) f[i]=0; for (int i=1;i<=t;i++) if (cnt[i]+n-K+1==m) for (int j=m+1;j<=t;j++) map[j][i]=0; else for (int j=m+1;j<=t;j++) map[j][i]=1; for (int i=1;i<=t;i++) { for (int j=1;j<=t;j++) vis[j]=0; dfs1(i); } for (int i=1;i<=t;i++) { for (int j=1;j<=t;j++) vis[j]=0; dfs2(i,i); } s=""; for (int i=1;i<=t;i++) if (f[i]<=m) { map[f[i]][i]=0; cnt[i]++; ans[f[i]]=i; } for (int i=1;i<=m;i++) s+=toc(ans[i]); ret.push_back(s); } return ret; }};
0 0
- Topcoder TheContest
- Topcoder TheContest
- TopCoder
- topcoder
- Topcoder
- topcoder
- topcoder
- Topcoder
- TOPCODER交流
- topcoder 小结
- TopCoder介绍
- topcoder是什么?
- TopCoder教程
- TopCoder简介
- TopCoder入门教程
- topcoder入门
- topcoder配置
- TopCoder入门教程
- 服务-rsync
- simtrace之探秘SIM卡中的世界
- 选择和冒泡排序
- LINUX core dump详解 & GDB调试
- Visual Studio Code关联MATLAB的.m文件并进行编辑提示
- Topcoder TheContest
- Fill-rate, Canvases and input 【译】
- 字符串中连续最长的数字字符串
- 面试18之猫狗队列
- java操作json以及jsonObject、jsonArray的使用
- 查看设备树platform总线上的所有节点
- 希尔排序
- adaboost分类
- java专业英语