刷题打卡2 UVa1590,UVa508, UVa509
来源:互联网 发布:百川环评工程师软件 编辑:程序博客网 时间:2024/05/20 06:31
题目 4
IP网络(IP Networks,UVa1590)
https://cn.vjudge.net/problem/UVA-1590
思路及参考代码http://blog.csdn.net/hahaac/article/details/52649997(感谢dalao)(,看了好久看懂了点点)
思路:
ip的四个部分分别处理,每一部分找出最大值的最小值,然后判断是其二进制最后几位不同,得出子网掩码;
用任意一个IP与子网掩码进行按位与运算得出最小IP
代码:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=10000+10;int dns_table[9]={255,254,252,248,240,224,192,128,0};int ip[4][maxn];int main(){int m;while(~scanf("%d",&m)){memset(ip,0,sizeof(ip));int dns[4];int minip[4];for(int i=0;i<m;i++){scanf("%d.%d.%d.%d",&ip[0][i],&ip[1][i],&ip[2][i],&ip[3][i]);}for(int i=0;i<4;i++){int dir=0;int j;sort(ip[i],ip[i]+m);int p=ip[i][m-1];int q=ip[i][0];for(j=1;j<=8;j++){if(p%2!=q%2) dir=j;p/=2;q/=2;}dns[i]=dns_table[dir];minip[i]=ip[i][0]&dns[i];}for(int i=0;i<4;i++){if(dns[i]!=255){for(i=i+1;i<4;i++){dns[i]=0;minip[i]=0;}break;}}printf("%d.%d.%d.%d\n",minip[0],minip[1],minip[2],minip[3]);printf("%d.%d.%d.%d\n",dns[0],dns[1],dns[2],dns[3]);}return 0;}
题目 5
莫尔斯电码(Morse Mismatches, UVa508)(map)
https://cn.vjudge.net/problem/UVA-508
思路及代码参考http://www.cnblogs.com/dwtfukgv/p/5572356.html(感谢dalao)
思路:
首先先把每个字母做一个map,
然后把字典做一个map,最后输入时暴力一下,每个都找一下,这个增加字符可以这样想,就是在和字典比较时,短的在长的字符串中,
截取和短的一样的长度的字符串相等,那么就只要比较长的比短的长多少就行了,最后取一个最短的就OK了。代码:
#include<iostream>#include<cstdio>#include<cstring>#include<map>using namespace std;const int INF=0x3f3f3f;// 关于无穷大0x3f3f3f的一些知识map<char,string>morse;map<string,string>dic;int judge(string a,string b){if(a==b) return 0;//相等if(a.size() >b.size() ) swap(a,b);//保证a的长度小于b的长度if(a==b.substr(0,a.size())) return b.size()-a.size();//如果a和b的前一段一样,那么就可以正价或删减字符使他们一样,返回长度差return INF;//如果不一样,那就不能通过增加或删除使他们一样,那么就返回最大值 } string solve(const string &s){string ans="";int mmin=INF;//初始化for(map<string,string>::iterator it=dic.begin();it !=dic.end();it++){int d=judge(s,it->second);if(!d&&!mmin&&*ans.rbegin()!='!'){ans+="!";return ans;}//说明精确匹配了 两次,直接返回就OK了else if(d<=mmin) ans=it->first;//不精确匹配mmin=min(d,mmin); } if(mmin) ans+="?";//如果不是精确匹配return ans; } int main(){string s,ch;while(cin>>ch&&ch!="*"){cin>>s;morse[ch[0]]=s;//构造字符map }while(cin>>s&&s!="*"){for(int i=0;i<s.size();i++)dic[s]+=morse[s[i]];//构造字典 }while(cin>>s&&s!="*")cout<<solve(s)<<endl;return 0; }
题目 6
RAID技术(RAID!, ACM/ICPC World Finals 1997, UVa509)
https://cn.vjudge.net/problem/UVA-509
思路及代码参考http://blog.csdn.net/thudaliangrx/article/details/50700688(感谢dalao)
代码:
#include<iostream>#include<cstring>#include<string>#include<cstdio>#include<algorithm>using namespace std;const int D=6;const int S=64;const int B=100;int main(){int kase = 0; int d, s, b, e; char data[D][S*B+1]; while (scanf("%d", &d) && d) { char c[2]; scanf("%d%d%s", &s, &b, c); e = (c[0] == 'E') ? 0 : 1; for (int i = 0; i < d; i++) scanf("%s", data[i]);bool flag = true; for (int i = 0; i < b; i++) { for (int j = i*s; j < (i+1)*s; j++) { int cntx = 0; int x = d; int num = 0; for (int k = 0; k < d; k++) { if (data[k][j] == 'x') { cntx++; x = k; } else num ^= (data[k][j] - '0'); } if (cntx > 1 || x == d && num != e) { flag = false; break;} if (x < d) data[x][j] = (num ^ e) + '0'; } if (flag == false) break; }if (flag == false) { printf("Disk set %d is invalid.\n", ++kase); continue; } int n=0; char res[(D-1)*S*B+4]; for(int i=0;i<b;i++){ int p=i%d; for(int k=0;k<d;k++){ if(k==p) continue; strncpy(res+n,data[k]+i*s,s);//把data[k]+i*s所指向的字符串中以前s个字节复制到res+n所指的数组中,并返回res+n n+=s;} }while(n%4) res[n++]='0';res[n]='\0'; printf("Disk set %d is valid, contents are: ", ++kase); for (int i = 0; i < n; i += 4) { int m = 0; for (int j = i; j < i+4; j++) m = m*2 + res[j] - '0'; printf("%c", (m < 10) ? m+'0' : m-10+'A'); } printf("\n");}return 0;}
————越努力,越幸运BYyingying
阅读全文
1 0
- 刷题打卡2 UVa1590,UVa508, UVa509
- UVa508
- uva1590
- uva1590
- UVa1590
- UVa1590
- 2016.7.13 刷题打卡
- 刷题打卡3 UVa230
- 刷题打卡 5 UVa210
- 刷题打卡 6 poj1222
- 刷题打卡1 poj1543 ,poj1006,poj1013
- 刷题打卡 4 UVA-1596
- UVa509 - RAID!
- uva509 RAID
- vba基础打卡2
- 打卡
- 打卡
- 打卡
- iOS_LocalPush_本地推送
- GG and MM
- RecyclerView点击事件
- POJ-3984迷宫问题 (BFS,水题)
- POJ2251 BFS
- 刷题打卡2 UVa1590,UVa508, UVa509
- 二叉排序树--cf675d Tree construction
- P3741 honoka的键盘
- Python字典对象实现原理
- 8.10关于二维数组
- 8.10
- 操作数据库(增删改查)
- Python 身份运算符
- 自我的检讨