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;
}