从评测机返回的结果看起来是Incorrect和Correct判断的问题,但样例全过了
下载数据太大了,更本派不上用场
#include<bits/stdc++.h>
using namespace std;
const int mx=10000005;
const int mn=1005;
int ans[mx],stuans[mx];
string rawstuans[mn];
bool isjump=false;
int pzs(string s,int p){
int h=0,w=1,i;
for(int i=s.size()-1;i>=0;i--){
if(isdigit(s[i])) h+=(s[i]-48)*w;
else h+=(s[i]-55)*w;
w*=p;
}
return h;
}
string szp(int n,int p){
string s;
int y;
while(n){
y=n%p;
if(y>=10) s=char(y+55)+s;
else s=char(y+48)+s;
n=n/p;
}
return s;
}
bool checkid(string _id){
bool flag=true;
int id=pzs(_id,2);
if(!(id>0&&id<10001)){
cout<<"Wrong ID"<<endl;
return true;
}
cout<<"ID: "<<id<<endl;
return false;
}
void checktype(string id,string choose){
int correct_answer=id[id.size()-1]-'0';
if(id[id.size()-1]==choose[1]) cout<<"Type Correct"<<endl;
else cout<<"Type Incorrect"<<endl;
}
void getscore(int correct_ans[],int ans[],double size_of_answers){
double correct_answer=0;
for(int i=0;i<size_of_answers;i++){
// cout<<correct_ans[i]<<" "<<ans[i]<<endl;
if(correct_ans[i]==ans[i]){
correct_answer++;
}
}
// cout<<correct_answer<<endl;
cout<<fixed<<setprecision(1)<<correct_answer/size_of_answers*100.0<<endl;;
}
void make_std(string raw,int res[]){
for(int i=0;i<raw.size();i++){
if(raw[i]=='A') res[i]=1;
if(raw[i]=='B') res[i]=2;
if(raw[i]=='C') res[i]=3;
if(raw[i]=='D') res[i]=4;
}
}
void make_ans(string ans[],int res[],int size){
for(int i=0;i<size;i++){
if(ans[i]=="1000"){
res[i]=1;
continue;
}
if(ans[i]=="0100"){
res[i]=2;
continue;
}
if(ans[i]=="0010"){
res[i]=3;
continue;
}
if(ans[i]=="0001"){
res[i]=4;
continue;
}
res[i]=-1;
}
}
int main(){
int n,t;
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>t;
string s,tmp;
cin>>s;
make_std(s,ans);
for(int i=1;i<=n;i++){
isjump=false;
cin>>s;
if(checkid(s)) isjump=true;
cin>>tmp;
if(!isjump) checktype(s,tmp);
for(int j=0;j<t;j++){
cin>>s;
rawstuans[j]=s;
}
if(!isjump) make_ans(rawstuans,stuans,t);
if(!isjump) getscore(ans,stuans,t);
cout<<endl;
}
return 0;
}