题解 P3692 【夏幻的考试】

引领天下

2018-05-13 15:36:33

Solution

其实这题很简单啊,代码也没有必要写那么长 就是按题目说的模拟 代码: ```cpp #include <bits/stdc++.h> using namespace std; int n,m,ans[55];//ans[i]为第i题的正确序号(0,1,2,3) string s; int main(){ ios::sync_with_stdio(false); cin>>n>>m>>s; for (int i=0;i<m;i++)ans[i]=s[i]-'A';//读入标准答案 while (n--){ double cnt=0; int kh=0; cin>>s; for (int i=15;i>=0;i--)kh+=(s[i]-'0')*pow(2,15-i);//算考号 bool khzq=kh>=1&&kh<=10000;//检查是否合法 if (!khzq){ for (int i=0;i<=m;i++)cin>>s; printf ("Wrong ID\n\n");continue;//不合法 } cin>>s; if (s[0]==s[1])s[kh&1]='0';//如果两个都填了或者两个都没填,让它变成错误 //不难发现考号%2就是最后一位,因为2的方冥都是偶的 printf ("ID: %d\nType %s\n",kh,s[kh&1]-'0'?"Correct":"Incorrect");//输出ID和是否正确 for (int i=0;i<m;i++){ cin>>s; bool ok=0,f=0; for (int j=0;j<4;j++)if (s[j]-'0'&&ok)f=1;//如果填了两个 else if (s[j]-'0')ok=1;//如果填了 if (ok&&!f&&s[ans[i]]-'0')cnt+=100.0/m;//只填了一个且填的是对的 } printf ("%.1f\n\n",cnt);//输出 } return 0; } ```