abc250_a

题目翻译

有一个 $h\times w$ 的矩阵,有个数对 $(r,c)$,问与 $(r,c)$ 相邻的有几个。

题目思路

判断 $r,c$ 是否在边界。

AC 代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int h,w,r,c;
    cin>>h>>w>>r>>c;
    int a=4;
    if(r==h)a--;
    if(r==1)a--;
    if(c==1)a--;
    if(c==w)a--;
    cout<<a<<endl;
    return 0;
}

abc250_b

题目翻译

绘制一个 $(a\times n)\times(b\times n)$ 的矩阵。

矩阵要求很复杂,建议直接看样例就懂了。

题目思路

判断奇偶。

AC 代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,a,b;
    cin>>n>>a>>b;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=a;j++)
        {
            for(int l=1;l<=n;l++)
            {
                for(int k=1;k<=b;k++)
                {
                    cout<<((l+i)%2==0?'.':'#');
                }
            }
            cout<<endl;
        }
    }
    return 0;
}

abc250_g

题目翻译

双倍经验

题目思路

反悔贪心。

AC 代码

#include<bits/stdc++.h>
using namespace std;
priority_queue<int>q;
int main()
{
    long long n,ans=0,minn=INT_MAX;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        int x;
        cin>>x;
        q.push(-x);
        q.push(-x);
        ans+=x+q.top();
        q.pop();
    }
    cout<<ans<<endl;
}

abc250_d

题目翻译

问 $[1,n]$ 中有多少数,可以拆分成 $p\times q^3$,且 $p<q$,并都是质数。

题目思路

统计 $[1,\sqrt[3]{n}]$ 的质数个数,枚举 $q$ 推出 $p$。

AC 代码

#include<bits/stdc++.h>
using namespace std;
bool pri[1000005];
int prime[1000005];
void init(int n)
{
    pri[0]=pri[1]=1;
    for(int i=2;i<=sqrt(n);i++)
    {
        if(!pri[i])
        {
            for(int cnt=2;cnt<=n/i;cnt++)
            {
                pri[i*cnt]=1;
            }
        }
    }
}
int main()
{
    long long n,ans=0;
    cin>>n;
    init(1000000);
    prime[0]=prime[1]=0;
    prime[2]=1;
    for(long long i=3;i<=1000000;i++)
    {
        prime[i]=(pri[i]==0)+(prime[i-1]);
    }
    for(long long i=2;i*i*i<=n;i++)//q
    {
        if(pri[i]==0)
        {
            long long j=n/(i*i*i);
            if(j>=i)j=i-1;
            ans+=prime[j]-prime[1];
        }
    }
    cout<<ans<<endl;
    return 0;
}

abc250_c

题目翻译

初始一个 $1$ 到 $n$ 的排列。
$q$ 次操作,每次操作 $x$。
把数字 $x$ 和 $x$ 右边的数字交换。
如果数字 $x$ 是最后一个,那么和自己左边的数字交换。
输出 $q$ 次交换之后的结果。

题目思路

两个数组统计每个球的数字和位置。

AC 代码

#include<bits/stdc++.h>
using namespace std;
int a[200005],b[200005];
int main()
{
    int n,q;
    cin>>n>>q;
    for(int i=1;i<=n;i++)
    {
        a[i]=b[i]=i;
    }
    while(q--)
    {
        int x;
        cin>>x;
        if(a[x]==n)swap(b[a[x]-1],b[a[x]]),swap(a[b[a[x]-1]],a[b[a[x]]]);
        else swap(b[a[x]+1],b[a[x]]),swap(a[b[a[x]+1]],a[b[a[x]]]);
    }
    for(int i=1;i<=n;i++)
    {
        cout<<b[i]<<" ";
    }
    return 0;
}
最后修改:2023 年 04 月 20 日
v我50吃疯狂星期四