洛谷 [语言月赛 202508] 选座专家 题解

这道题还是很坑的,首先让答案把c[1]全加上(第一排嘛),接着处理除了第一排的左右两个座位(如果c[i]==1就只能记录一个了,注意要加标记数组以防重复)最后枚举所有坐位号如果(i*j)%10==6||b[i][j]==0就答案++即可
代码展示:

#include<bits/stdc++.h>
// #define int long long
#define endl "\n"
#define fastio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std;
void init()
{
    bool b[105][105]={0};
    int n,ans=0;
	cin>>n;
	int c[n+5];
	for(int i=1;i<=n;i++)cin>>c[i];
	ans+=c[1];
    for(int i=1;i<=c[1];i++)b[1][c[i]]=1;
	for(int i=2;i<=n;i++)
	{
		if(c[i]>1)ans+=2,b[i][1]=b[i][c[i]]=1;
		else ans++,b[i][1]=1;
	}
	for(int i=2;i<=n;i++)
	{
		for(int j=1;j<=c[i];j++)
		{
            if(b[i][j])continue;
			if(((i*j)%10)==6)ans++,b[i][j]=1;
		}
	}
	cout<<ans<<"\n";
}
signed main()
{
	fastio;
    int _;
    cin>>_;
    while(_--)init();
	return 0;
}
posted @ 2025-08-25 14:10  CCCsuper  阅读(97)  评论(0)    收藏  举报
萌ICP备20256293号