vmware安装centos7,连接xshell

XTDrone公开课 2021.8.20

  返回  

【8.20模拟赛T1.3440】答题卡【模拟】

2021/8/20 21:58:40 浏览:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
题目链接:https://gmoj.net/senior/#main/show/3440

分析

大模拟,不多说,写了半天,好多细节。。。
某水螅调到晚上9:30才过笑死我了

注意一些细节:

  1. 名字部分是首字母大写,如果名字开头是字符就要while判一下。
  2. 答题卡是竖着的,最好转换一下,一行一行比对比较方便
  3. 注意分数的判定,只要错选一个就没分,用个变量记录一下

上代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;

int n,m;
int all[105],part[105];
string s[105],card[105],b[105];
 
struct node 
{
	string name1,name2;
	int point;
}a[1005];

int cmp(node l,node r)
{
	if(l.point==r.point)
	{
		if(l.name1==r.name1) return l.name2<r.name2;
		else return l.name1<r.name1;
	}
	else 
    return l.point>r.point;
}

int main()
{
	cin>>n>>m;
	getchar();
	for(int i=1;i<=n;i++)
	{
		cin>>a[i].name1;
		for(int j=0;j<=a[i].name1.length()-1;j++)
		{
			if(a[i].name1[j]>='a'&&a[i].name1[j]<='z') a[i].name1[j]-=32;
		}
		cin>>a[i].name2;
		int j=0;
		while(a[i].name2[j]==45||a[i].name2[j]==39) j++;
	    if(a[i].name2[j]>='a'&&a[i].name2[j]<='z') a[i].name2[j]-=32;
		for(j=j+1;j<=a[i].name2.length()-1;j++)
		{
			if(a[i].name2[j]>='A'&&a[i].name2[j]<='Z') a[i].name2[j]+=32;
		}
	}
    for(int i=0;i<=m-1;i++)
    {
    	cin>>all[i]>>part[i]>>s[i]; 
    }
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=4;j++)
		{
		   	cin>>b[j];
		   	int len=b[j].length();
		   	for(int k=0;k<=len-1;k++)
		   	{
		   		if(b[j][k]=='X')
		   		{
		   			b[j][k]=j+64;
			    }
		    }
		}
		for(int j=0;j<=m-1;j++)
		{
			int tot=-1,cnt1=0,ff=0;
			for(int k=1;k<=4;k++)
			{     
			    if(b[k][j]!='.')
			    {
			    	card[j][++tot]=b[k][j];
					//cout<<card[j][tot];   
					int cnt2=0;
					for(int l=0;l<=s[j].length()-1;l++)
					{
					   	if(s[j][l]==card[j][tot]){cnt1++;break;}
					   	else if(s[j][l]!=card[j][tot]){cnt2++;}
					}
					if(cnt2==s[j].length())
					{
						ff=1;break;
					}
				}
			}
			//cout<<cnt1<<' '<<ff<<' '<<s[j].length()<<endl;
			if(cnt1==s[j].length()&&ff==0) a[i].point+=all[j]; 
			else if(cnt1>0&&cnt1<s[j].length()&&ff==0) a[i].point+=part[j];  
			//    cout<<a[i].point<<endl;
        }
	}
	sort(a+1,a+n+1,cmp);
	for(int i=1;i<=n;i++)
	{
		cout<<a[i].point<<' '<<a[i].name1<<' '<<a[i].name2<<endl;
	}
	return 0;
}
/*
3 4
Wang yingXu 
Wang yingXu's-Meizi
hu zECONG-sb
10 5 ABCD
10 10 C
5 0 CD
10 5 ABD

X..X
X..X
XXX.
X.XX

X..X
X...
.XX.
X..X

....
....
....
....
*/

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号