广工校赛的水题

来源:互联网 发布:win10禁止自动更新软件 编辑:程序博客网 时间:2024/05/22 00:16

Problem E: GDUT的实验室

Description

众所周知,我们GUDT的集训队实验室很高大上,里面拉有千兆光纤,下载速度高达***M/s…但是问题来了,我们都知道每台电脑都会被分配一个IP地址,这些IP地址形如A.B.C.D,但是机器只懂得二进制,它会将IP地址读成二进制的地址(仅有1和0),但机器难免会出点问题,现在给你一个十进制的IP地址,再给你一个机器翻译后的二进制的IP地址,问这两个地址是否相同?

Input

输入第一个行是一个整数T,表示总共有T组数据。(1<=T<=10000) 
接下来是T组数据,每组数据占两行,第一行是十进制的IP地址(A.B.C.D)(0<=A,B,C,D<=255),第二行是机器翻译过的二进制的IP地址(XXXXXXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX) ‘X’分别由’1’或者’0’组成

Output

结果输出T行,对应T组数据。十进制的IP地址与机器翻译过的二进制IP地址相同,则输出”Yes”,否则输出”No”,注意,输出时注意大小写且没有引号。

Sample Input


192.168.1.1 
11000000.10101000.00000001.00000001 
65.254.63.122 
01000001.11111110.00111111.01111011

Sample Output

Yes 

No



分析:自己真的太水了,在考虑着怎样把192转化为数字之后再变01序列,但是自己敲了挺久都没有出来,想用什么while(a[i]!='.')之类的,越弄越烦,最后直接看题解,发现还能这样用。。。还有什么string我不太会用。这样的话截取字符串就难了。

自己做题太少,连不考算法的水题都不会了


2017年3月11日21:59:48:

一段时间过去了,自己再来重做,发现其实不难,,看来有些东西其实动手了就不难。。。

当然有些东西盲目动手了反而会乱,会显得更难。。   着可真的是辩证啊。。附上自己再敲得代码

#include<string>#include<algorithm>#include<vector>#include<cstring>#include<cstdio>#include <vector>#include<iostream>#include<iomanip>using namespace std;int change(string s){    int ans=0;    int num=1;    for(int i=7;i>=0;--i){        if(s[i]=='1')ans+=num;        num<<=1;    }    return ans;}int am[5];int main(){    int t;    cin>>t;    int a[4];    char ch;    string b;    string s2temp[4];    int s1temp[4];    while(t--){       cin>>a[0]>>ch>>a[1]>>ch>>a[2]>>ch>>a[3];//居然可以这样       cin>>b;       s2temp[0]=b.substr(0,8);       s2temp[1]=b.substr(9,8);       s2temp[2]=b.substr(18,8);       s2temp[3]=b.substr(27,8);       s1temp[0]=change(s2temp[0]);       s1temp[1]=change(s2temp[1]);       s1temp[2]=change(s2temp[2]);//自己还不会这样用。       s1temp[3]=change(s2temp[3]);       int ok=1;        for(int i=0;i<4;++i){            if(s1temp[i]==a[i])continue;            else ok=0;        }        if(ok)cout<<"Yes"<<endl;        else cout<<"NO"<<endl;    }}
其实什么字符串转换为数字啊。 转换为字符数组啊。。一点都不难的。。我不要畏惧
#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<string>#include<cstring>#include<iomanip>#include<iostream>#include<stack>#include<cmath>#include<map>using namespace std;typedef long long ll;int numb[4];int numa[4];int main(){    int t;    scanf("%d",&t);    while(t--){        string a,b;        cin>>a>>b;        int lena=a.length();        int cnt=0;        memset(numa,0,sizeof(numa));        for(int i=0;i<lena;++i){            if(a[i]=='.'){                cnt++;                continue;            }            numa[cnt]*=10;            numa[cnt]+=a[i]-'0';        }        cnt=0;        for(int i=0;i<b.length();++i){            if(b[i]=='.'){                cnt++;                continue;            }            numb[cnt]<<=1;            numb[cnt]+=b[i]-'0';        }        for(int i=0;i<4;++i)            cout<<numa[i]<<' '<<numb[i]<<endl;        int flag=1;        for(int i=0;i<4;++i){            if(numa[i]!=numb[i]){                flag=0;                break;            }        }        if(flag)cout<<"Yes"<<endl;        else cout<<"no"<<endl;    }}





0 0
原创粉丝点击