UVALive
来源:互联网 发布:叙利亚内战 知乎 编辑:程序博客网 时间:2024/04/29 06:21
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4601
题意:给你一些只有2个长度的字符串,让你尽量打印出一个大的m*m的矩阵,矩阵中横竖都不包括给出的字符串,最大20。
思路:对建立 的图求出他的补图,如果补图中存在环路,则存在一条链可以无限长,一定可以打印出一个20*20的矩阵。否则矩阵的大小为(最长路的长度+1)/2
#include<iostream>#include<bits/stdc++.h>using namespace std;typedef unsigned long long int ll;int mp[33][33];char ch[6];int ji[33];int lu[33];bool vis[33];int mm;bool is;int top;int flag;void dfs(int rt,int root){ if(is) return ; if(vis[rt]) { if(root==rt){ is=1; flag=rt; } return ; } ji[top++]=rt; if(mm<top) { mm=top; for(int i=0;i<top;i++) lu[i]=ji[i]; } vis[rt]=1; for(int i=0;i<26;i++) { if(!mp[rt][i]) dfs(i,root); if(is) return ; } top--; vis[rt]=0;}int main(){ int t; cin>>t; while(t--) { is=mm=0; int n; cin>>n; memset(mp,0,sizeof(mp)); while(n--) { scanf("%s",&ch); mp[ch[0]-'a'][ch[1]-'a']=1; } for(int i=0;i<26&&is==0;i++) { top=0; memset(vis,0,sizeof(vis)); dfs(i,i); } if(is) { int i; int ss=0; for(int ii=0;ii<20;ii++) { for(int jj=0;jj<20;jj++) printf("%c",'a'+(ji[(ii+jj)%top])); cout<<endl; } } else { for(int ii=0;ii<(mm+1)/2;ii++) { for(int jj=0;jj<(mm+1)/2;jj++) printf("%c",'a'+(lu[(ii+jj)])); cout<<endl; } } } return 0;}
0 0
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- 考核指标在管理中心的重要性
- Thymeleaf一次性设置多个属性为相同值
- 自定义标签
- 华为工作10年,年薪80万。
- 精简测试用例编写
- UVALive
- 正则表达式(二)-- 匹配一组字符
- 复合形算法及matlab代码
- Apache Thrift
- 99%的人都理解错了HTTP中GET与POST的区别
- OpenJudge Mooc 5.1 Zipper
- Spring中属性注入的几种方式以及复杂属性的注入
- javaWEB总结(22):session的常用方法
- GB2312、GBK、GB18030 、UTF-8、Unicode、ASCII这几种字符集的主要区别是什么?