292C Beautiful IP Addresses
题目
The problem uses a simplified TCP/IP address model, please read the statement carefully.
An IP address is a 32-bit integer, represented as a group of four decimal 8-bit integers (without leading zeroes), separated by commas. For example, record 0.255.1.123 shows a correct IP address and records 0.256.1.123 and 0.255.1.01 do not. In the given problem an arbitrary group of four 8-bit integers is a correct IP address.
Our hero Polycarpus still works as a system administrator in some large corporation. He likes beautiful IP addresses. To check if some IP address is beautiful, he should do the following:
- write out in a line four 8-bit numbers of the IP address, without the commas;
- check if the resulting string is a palindrome.
Let us remind you that a palindrome is a string that reads the same from right to left and from left to right.
For example, IP addresses 12.102.20.121 and 0.3.14.130 are beautiful (as strings "1210220121" and "0314130" are palindromes), and IP addresses 1.20.20.1 and 100.4.4.1 are not.
Polycarpus wants to find all beautiful IP addresses that have the given set of digits. Each digit from the set must occur in the IP address at least once. IP address must not contain any other digits. Help him to cope with this difficult task.
Input
0 1 2 9 8 7
Output
6
78.190.209.187
79.180.208.197
87.190.209.178
89.170.207.198
97.180.208.179
98.170.207.18
Input
1
4
Output
16
4.4.4.4
4.4.4.44
4.4.44.4
4.4.44.44
4.44.4.4
4.44.4.44
4.44.44.4
4.44.44.44
44.4.4.4
44.4.4.44
44.4.44.4
44.4.44.44
44.44.4.4
44.44.4.44
44.44.44.4
44.44.44.44
题目大意
给你n个数,问由这n个数组成的回文合法ip地址的数量并输出它们。
分析
首先,我们不难想出最朴素的暴力,枚举所有长度并构造,然后进行判断。不过,这显然是不行的。然后我们在考虑减少构造的长度,首先,因为我们要构造回文串,所以我们可以只枚举长度的一半的上取整,这样即避免了判断回文的时间,又减少了构造所需时间。确定大致思路后我们还有一些要考虑的细节:
一、确定构造长度:开始我先到可能有两种情况(123321型和12321型),但之后我又想到还可能有一种情况(1231321型),但在wa12之后(面向数据编程QAQ),我发现对于任何长度大于等于2*n的长度都可以构造,并可以将它们分成模2余0和模2余1两种情况。
二、构造:开始在想到三种构造长度情况后我想到了枚举n个数的不同顺序,但在wa5之后我发现了n<len/2这种情况继而想到12322321型,但进一步考虑后我发现12233221型,所有在构造是我们不考虑一个数是否出现过而考虑在构造完成后是否n个数全部用上了。
三、分隔并判断:只需考虑将每一节分成1个数、2个数、3个数三种情况,然后再判断是否将整个数列全部分完并分成4节即可。
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
int a[20],ans[20],used[20],pr[4];
int s[4][100000];
int cnt;
inline void check(int len,int i,int j){
if(i==len+1&&j==4){
s[0][++cnt]=pr[0];
s[1][cnt]=pr[1];
s[2][cnt]=pr[2];
s[3][cnt]=pr[3];
return;
}
if(i==len+1&&j<4)return;
if(j==4&&i<len+1)return;
if(i<=len){
pr[j]=ans[i];
check(len,i+1,j+1);
}
if(i+1<=len&&ans[i]!=0){
pr[j]=ans[i]*10+ans[i+1];
check(len,i+2,j+1);
}
if(i+2<=len&&ans[i]!=0&&ans[i]*100+ans[i+1]*10+ans[i+2]<256){
pr[j]=ans[i]*100+ans[i+1]*10+ans[i+2];
check(len,i+3,j+1);
}
}
inline void make(int pl,int n,int len,int sum){
if(n-sum>len/2+1-pl)return;
if(pl==len/2+1&&sum==n){
for(int i=len/2+1;i<=len;i++)
ans[i]=ans[len-i+1];
check(len,1,0);
return;
}
for(int i=1;i<=n;i++){
int k=0;
if(!used[i])used[i]=1,sum++,k=1;
ans[pl]=a[i];
make(pl+1,n,len,sum);
if(k)used[i]=0,sum--;
}
return;
}
inline void go(int len,int n){
make(1,n,len,0);
return;
}
inline void make2(int pl,int n,int len,int sum){
if(n-sum>(len+1)/2+1-pl)return;
if(pl==(len+1)/2+1&&sum==n){
for(int i=(len+1)/2+1;i<=len;i++)
ans[i]=ans[(len+1)-i];
check(len,1,0);
return;
}
for(int i=1;i<=n;i++){
int k=0;
if(!used[i])used[i]=1,sum++,k=1;
ans[pl]=a[i];
make2(pl+1,n,len,sum);
if(k)used[i]=0,sum--;
}
return;
}
inline void go2(int len,int n){
make2(1,n,len,0);
return;
}
int main()
{ int n,m,i,j,k;
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
if(n>=7){
puts("0");
return 0;
}
for(i=4;i<=12;i++)
if(i>=2*n&&i%2==0){
go(i,n);
}else if(i>=2*n-1&&i%2==1){
go2(i,n);
}
cout<<cnt<<endl;
for(i=1;i<=cnt;i++)
printf("%d.%d.%d.%d\n",s[0][i],s[1][i],s[2][i],s[3][i]);
return 0;
}
292C Beautiful IP Addresses的更多相关文章
- xtu summer individual-4 A - Beautiful IP Addresses
Beautiful IP Addresses Time Limit: 2000ms Memory Limit: 262144KB This problem will be judged on Code ...
- 【leetcode】Restore IP Addresses
Restore IP Addresses Given a string containing only digits, restore it by returning all possible val ...
- 保留ip: Reserved IP addresses
Reserved IP addresses From Wikipedia, the free encyclopedia In the Internet addressing architect ...
- 93. Restore IP Addresses
题目: Given a string containing only digits, restore it by returning all possible valid IP address com ...
- 93.Restore IP Addresses(M)
93.Restore IP Addresses Medium 617237FavoriteShare Given a string containing only digits, restore it ...
- 亚马逊 AWS ip反向解析:Configurable Reverse DNS for Amazon EC2’s Elastic IP Addresses
I’d like to call your attention to a new feature that we rolled out earlier this month. You can now ...
- "cni0" already has an IP address different from 10.244.2.1/24。 Error while adding to cni network: failed to allocate for range 0: no IP addresses available in range set: 10.244.2.1-10.244.2.254
"cni0" already has an IP address different from 10.244.2.1/24. Error while adding to cni n ...
- IP addresses in C#
在.Net网络库里面最大的优点就是IP地址和端口被成对处理,相比于UNIX中用的方法真是一个巨大的令人欢迎的进步..NET定义了两个类来处理关于IP地址的问题. One of the biggest ...
- 【LeetCode】93. Restore IP Addresses
Restore IP Addresses Given a string containing only digits, restore it by returning all possible val ...
随机推荐
- P3988 [SHOI2013]发牌
题目 P3988 [SHOI2013]发牌 做法 我们切牌时的状态: 手玩几次后我们发现切\(K\)次牌就是求堆顶一下的\(K+1\)大值,套上主席树就好了 My complete code #inc ...
- HTTP请求解析--从一个请求开始
先来看看一个http请求实例 请求行: POST /chapter17/user.html HTTP/1.1 请求头: Accept: application/json, text/javascrip ...
- 优化chkconfig
只保留系统服务: crond /network /sshd /rsyslog /sysstat 其他服务全部关闭 首先将所有 3:on的服务名过滤出来,然后 grep -vE 排除需要的服务 #!/b ...
- linux新增用户和删除用户
新增用户 新增用户命令:useradd 参数: 参数 说明 -u 指定UID,也就是自定义UID -g 知道GID,也就是初始化用户组,/etc/passwd文件中的第四个字段. -G 后面接用户组的 ...
- cpu架构
转自 http://blog.csdn.net/wyzxg/article/details/5027738 CPU架构 Architecture ,结构.架构,这个词用于 CPU 的时候是指 CPU ...
- 通过request获取ID地址的方法
// 获取IP地址 public static String getIpAddr(HttpServletRequest request) { String ip = request.getHeade ...
- 机器学习(二十三)— L0、L1、L2正则化区别
1.概念 L0正则化的值是模型参数中非零参数的个数. L1正则化表示各个参数绝对值之和. L2正则化标识各个参数的平方的和的开方值. 2.问题 1)实现参数的稀疏有什么好处吗? 一个好处是可以简化 ...
- 浏览器访问web站点原理图
启动tomcat,在浏览器中输入http://localhost:8080/web_kevin/hello.html,发生的事情如下: 1.浏览器解析主机名,即解析localhost.浏览器首先会到本 ...
- ES _all、_source的使用——_all字段连接所有字段的值构成一个用空格(space)分隔的大string而被analyzed和index,document主体保存在_source中
1._all 1.1_all field _all字段是一个很少用到的字段,它连接所有字段的值构成一个用空格(space)分隔的大string,该string被analyzed和index,但是不被s ...
- ACM学习历程—HDU5423 Rikka with Tree(搜索)
Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he ...