代码如下:
#include<iostream>
#include<cstdio>
#include<string>
#include<cmath>
using namespace std;
string num;
unsigned T,n,cnt,pos;
double result;
bool flag=false;
char ch[4],type[2];
char* ans;
unsigned two_ten(string n){
unsigned ten=0;
for(unsigned i=0;i<n.size();i++)ten+=(n[i]-'0')*pow(2,n.size()-i-1);
return ten;
}
int main(){
cin>>T>>n>>num;
ans=new char[n];
for(unsigned i=0;i<n;i++)ans[i]=num[i];
for(unsigned i=0;i<T;i++){
cin>>num;
if(two_ten(num)>=1 and two_ten(num)<=10000)cout<<"ID:"<<two_ten(num)<<endl;
else flag=true,cout<<"Wrong ID\n";
cin>>type;
if(not flag){
if((type[0]-'0' and num[num.size()-1]=='0')or(type[1]-'0' and num[num.size()-1]=='1'))cout<<"Type Correct\n";
else cout<<"Type Incorrect\n";
}
else cout<<endl;
for(unsigned j=0;j<n;j++){
cin>>ch;
if(not flag){
for(unsigned m=0;m<4;m++)if(ch[m]=='1')pos=m,cnt++;
if(cnt==1 and pos+'A'==ans[j])result+=1.0/n*100;
cnt=0;
}
}
if(not flag)printf("%.1lf\n\n",result);
else cout<<endl<<endl;
flag=false;
result=0;
}
delete ans;
return 0;
}