洛谷 [语言月赛 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;
}

浙公网安备 33010602011771号