AtCoder Beginner Contest 442

JPRS Programming Contest 2026#1 (AtCoder Beginner Contest 442)

A Count .

统计字符串中字母 \(i\)\(j\) 的个数。

string s;
cin>>s;
int len=s.size(),ans=0;
for(int i=0;i<len;i++)
    if(s[i]=='i'||s[i]=='j') ans++;
printf("%d\n",ans);

B Music Player

\(flag\) 标记音乐是否正在播放,\(cnt\) 统计当前音乐的音量。

如果执行一次操作之后 flag==true&&cnt>=3 就输出 \(Yes\),否则输出 \(No\)

scanf("%d",&q);
while(q--)
{
    int x;
    scanf("%d",&x);
    if(x==1)
    {
        cnt++;
        if(flag&&cnt>=3) printf("Yes\n");
        else printf("No\n");
    }
    else if(x==2)
    {
        if(cnt>=1) cnt--;
        if(flag&&cnt>=3) printf("Yes\n");
        else printf("No\n");
    }
    else
    {
        if(!flag) flag=true;
        else flag=false;
        if(flag&&cnt>=3) printf("Yes\n");
        else printf("No\n");
    }
} 

C Peer Review

统计每位研究人员与多少个研究人员没有利益冲突。

设第 \(i\) 位研究人员与 \(cnt[i]\) 位研究人员没有利益冲突,从中随机抽三位作为审稿人,有 \(C_{cnt[i]}^3\) 有可能性。

自定义 calc 函数计算 \(C_b^a\)

LL calc(int a,int b)
{
	LL sum=1;
	for(int i=b;i>=b-a+1;i--)
		sum=(LL)sum*i;
	for(int i=1;i<=a;i++)
		sum=(LL)sum/i;
	return sum;
}
for(int i=1;i<=n;i++)
{
    if(cnt[i]<3) printf("0 ");
    else printf("%lld ",calc(3,cnt[i])); 
}

如何统计没有利益冲突的人数?

如果两人之间存在利益冲突,两人相应的 \(cnt\)\(-1\) 即可。

for(int i=1;i<=n;i++)
    cnt[i]=n-1; 
for(int i=1;i<=m;i++)
{
    int a,b;
    scanf("%d%d",&a,&b);
    cnt[a]--;
    cnt[b]--;
} 

D Swap and Range Sum

前缀和

题单:第2单元 前缀和与差分

看到统计 \(\sum\limits_{l\leq i\leq r} A_i\),想到前缀和,设前 \(i\) 个数的和为 \(s[i]\)

每次进行交换 \(A_x,A_{x+1}\) 的操作,只有前 \(x\) 个数的和发生变化。

\(s[x]\) 变为 \(s[x]-a[x]+a[x+1]\),交换 \(s[x],s[x+1]\) 即可。

while(q--)
{
    int k,x,l,r;
    scanf("%d",&k);
    if(k==1)
    {
        scanf("%d",&x);
        s[x]-=a[x];
        s[x]+=a[x+1];
        swap(a[x],a[x+1]);
    }
    else
    {
        scanf("%d%d",&l,&r);
        printf("%d\n",s[r]-s[l-1]); 
    }
}

如果交换的两个数字不是相邻的,就不能 \(O(1)\) 修改前缀和数组了。

再次沿用这道题的解法,一定会 \(\text{TLE}\)

这时需要用到一些进阶数据结构,树状数组线段树……

感兴趣的同学自行了解相关内容,这里提供一些参考资料。

  • 树状数组:

一篇博客:树状数组总结,从入门到进阶,涵盖了许多例题

  • 线段树:

一些模板题:【模板】线段树 1【模板】线段树 2【模板】线段树 1.5

posted @ 2026-01-31 16:06  Lan_Sky  阅读(3)  评论(0)    收藏  举报