3865. 线上考试

zhouzhouzhou edited 3 年,10 月前

我理解这题是在[单选中最大选项数]和[多选中最大选项数所有组合]选最大,是吗?
但例2就错了, 我输出1022,正确答案是1023
10
M 1
M 9
M 10
M 5
M 2
S 1
S 9
S 1
S 4
S 10

#include<iostream>
using namespace std;
int main()
{
	int qn,an,s[11],ans=1,t;
	char qt;
	cin>>qn;
	s[1]=1;
	for(int i=2;i<=10;i++)
		s[i]=s[i-1]*i;
	
	for(int i=1;i<=qn;i++)
	{
		cin>>qt>>an;
		if(qt=='S') //单选 
		{
			if(ans<an) ans=an;
		}
		else //多选 
		{
			t=0;
			for(int j=1;j<=an;j++)
				t=t+s[an]/s[j]/s[an-j];
			if(ans<t) ans=t;
		}
	}
	cout<<ans;
	return 0;
}

Comments

zhouzhouzhou

解决了.
犯了2个错误:
1、0的阶乘没有初始化;
2、else 与 最近的 if 配套。该死不死的是,本意最近的if应是else对应的if下语句,因只有一句,没有打{}

include

using namespace std;
int main()
{
int qn,an,s[11],ans=1,t;
char qt;
cin>>qn;
s[0]=1;
for(int i=1;i<=10;i++)
s[i]=s[i-1]*i;

for(int i=1;i<=qn;i++)
{
    cin>>qt>>an;
    if(qt=='S') //单选 
    {
        if(ans<an) ans=an;
    }

    else //多选 
    {
        t=0;
        for(int j=1;j<=an;j++)
            t=t+s[an]/s[j]/s[an-j];
        if(ans<t) ans=t;
        //cout<<qt<<"="<<an<<":"<<t<<endl;
    }
}
cout<<ans;
return 0;

}