【LGR-156-Div.3】洛谷网校 8 月普及组月赛 I & MXOI Round 1 & 飞熊杯 #2(同步赛)
发布时间 2023-08-27 08:27:51作者: The_Shadow_Dragon
- 水题,模拟即可。
int main()
{
int a,b,ans=0;
cin>>a>>b;
if((a<0&&b<0)||(a>0&&b>0))
{
cout<<max(abs(a),abs(b))<<endl;;
}
else
{
if(a==0||b==0)
{
cout<<abs(a)+abs(b)<<endl;
}
else
{
cout<<abs(a)+abs(b)+min(abs(a),abs(b))<<endl;
}
}
return 0;
}
- 水题。
- 令 \(sum_{i,j}\) 表示 \((1,1) \sim (i,j)\) 中与 \((i,j)\) 颜色相同的数量,则所求即为 \(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m} sum_{i,j} - 不合法答案\) 。
ll a[2001][2001],sum[2001];//不开long long见祖宗
int main()
{
ll n,m,i,j,pd,ans=0;
cin>>n>>m;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
cin>>a[i][j];
ans+=sum[a[i][j]]*2;
sum[a[i][j]]++;
if(a[i-1][j]==a[i][j])
{
ans-=2;
}
if(a[i][j-1]==a[i][j])
{
ans-=2;
}
}
}
cout<<ans<<endl;
return 0;
}
- 感觉类似luogu P9117 [春季测试 2023] 涂色游戏。
- 对于 \((i,j)\) 的方格,若有 \((h_i+l_j) \bmod k=0\) ,则 \((i,j)\) 无颜色;否则有颜色。
- 考虑对原题面进行转换,有颜色的方格数量等于总方格数量减无颜色的方格数量,而无颜色的方格数量可以理解为染色次数为 \(k\) 的倍数的方格数量。开个桶维护一下即可。
ll h[500001],l[500001],sum[500001];
int main()
{
ll n,m,q,k,i,pd,x,ans=0;
cin>>n>>m>>q>>k;
for(i=1;i<=q;i++)
{
cin>>pd>>x;
if(pd==1)
{
h[x]++;
}
if(pd==2)
{
l[x]++;
}
}
for(i=1;i<=n;i++)
{
sum[h[i]%k]++;
}
sum[k]=sum[0];
for(i=1;i<=m;i++)
{
l[i]%=k;
ans+=n-sum[k-l[i]];//也可以写成ans+=sum[k-l[i]]; 输出时输出n*m-ans即可
}
cout<<ans<<endl;
return 0;
}
总结
- 自己的模拟能力和题目转化能力太差,往后要多练习这种能力。