Escalator Conversations(Problem - A - Codeforces)
题目大意:有一个自动扶梯,共有m级台阶,每级台阶高为k,上面有n个人,我们规定如果两人站在不同的台阶上,高度恰好相同时可以进行交谈,小f身高为h,它想知道它可以和多少人进行交谈。
思路:这题没什么难度,就是小f与其他人的高度差要恰好是k的倍数,同时有两个限定条件,两人不能站在同一级台阶上,则不能与高度相同的人进行交谈,另外台阶总共m级,到第m级时就到终点了,所以倍数需要小于m。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,m,k,h,c=0;
scanf("%d%d%d%d",&n,&m,&k,&h);
for(int i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
int d=abs(h-x);
if(d&&d%k==0&&d/k<m) c++;
}
printf("%d\n",c);
}
}
Parity Sort(Problem - B - Codeforces)
题目大意:给定一个数组a[],我们每次可以选择两个元素进行交换,需要满足两个元素的奇偶性相同,问最后能否得到一个非降序数组。
思路:这道题显然就是奇数和偶数内部进行排序,我们可以先将奇数元素分别进行排序,然后按照原数组中每个数的奇偶性往里面填,最后看看我们填好的数组是否有序即可。
#include<bits/stdc++.h>
using namespace std;
int a[200010],b[200010];
vector<int>j,o;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(a[i]&1) j.push_back(a[i]);
else o.push_back(a[i]);
}
sort(j.begin(),j.end());
reverse(j.begin(),j.end());
sort(o.begin(),o.end());
reverse(o.begin(),o.end());
for(int i=1;i<=n;i++)
{
if(a[i]&1) b[i]=j.back(),j.pop_back();
else b[i]=o.back(),o.pop_back();
}
int c=0,flag=0;
for(int i=1;i<=n;i++)
{
if(c>b[i])
{
flag=1;
break;