零点工作室暑假集训(AtCoder--ABC254)

A - Last Two Digits

题意:给定一个整数,输出数的最后两位

思路:直接输出字符串的倒数第2和倒数第三位即可,因为字符串从0开始存储

AC代码:

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;
const int N = 1e3+5, MOD = 998244353;
 
string s;
 
int main() 
{
    cin >> s;
    int n = s.size();
    cout << s[n - 2] << s[n - 1];
    return 0;
}

B - Practical Computing

题意:在这里插入图片描述
思路:不难发现这是一道输出n阶的杨辉三角的题目,里面的数字满足这层关系 arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];

AC代码:

#include <bits/stdc++.h>

using namespace std;

const int N = 35;

int arr[N][N];
int n;

int main()
{
   cin >> n;
   for (int i = 0; i < n; i++)
   {
       arr[i][0] = 1;
       arr[i][i] = 1;
   }
   
   for (int i = 2; i < n; i++)
   {
       for (int j = 1; j < i; j++)
       {
           arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
       }
   }
   
   for (int i = 0; i < n; i++)
   {
       for (int j = 0; j <= i; j++)
       {
           cout << arr[i][j] << " ";
       }
       cout << endl;
   }
   return 0;
}

C - K Swap

题意:给定长度为N的数组,可整数K,你可以进行0次或者多次以下的操作:选择一个整数i ,然后 a[ i ]和 a [i + k] 进行交换,问最终能否得到非严格递增的数组。如果可以输出Yes,否则No。

思路:将1,1+K,1+K+K…,2,2+K,2+K+K…看成一个个连通块,在这些连通块中,最末的下标的一定能交换成最大的数,将数的下标记录下来,然后每个连通块按从小到大排好序后,再将其值放回去。看最终能都非严格单调递增。

AC代码:

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;

const int N = 2e5 + 1;

const int MOD = 1e9 + 7;

int n, k;

int main() 
{
	cin >> n >> k;
	vector<int> a(n);
	vector<vector<int>> b(k); // 二维数组存放数字
	
	for (int i = 0; i < n; i ++) 
	{
		cin >> a[i];
		b[i % k].push_back(a[i]);
	}
	
	// 对每一组数据进行降序排序
	for (int i = 0; i < k; i++) 
	{
		sort(b[i].rbegin(), b[i].rend());
	}
	
	sort(a.begin(), a.end());
	
	vector<int> res; // 存放结果
	
	for (int i = 0; i < n; i ++) 
	{
		res.push_back(b[i % k].back());
		b[i % k].pop_back();
	}
	
	if (a == res) printf("Yes");
	else printf("No");
	return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值