atcoderABC254场

A - Last Two DigitsA - Last Two Digits

atcoderABC254场_第1张图片atcoderABC254场_第2张图片

题目大意

题目要求输出一个整数N的倒数第二位和最后一位数字,即十位和个位数字。

思路分析

直接对100取模,再以两位数的格式输出,如果数字不足两位,则在前面补零。

时间复杂度

O(1)

代码

#include
using namespace std;
int main()
{
int n;
cin>>n;
int res=0;
res=n%100;
cout<<setw(2)<<setfill('0')<<res<<endl;
return 0;
}

B - Practical ComputingB - Practical Computing

atcoderABC254场_第3张图片atcoderABC254场_第4张图片

题目大意

要求生成一个大小为N的帕斯卡三角形,并将其输出。

思路分析

规律:根据定义,如果当前位置是第一列或最后一列,则该元素的值设为1;否则,该元素的值等于上一行同一列和上一行前一列的元素之和。
使用双重循环计算序列A的每个元素的值,并将其存储在二维向量a中。

时间复杂度

O(N2

代码

#include 
#include 
using namespace std;

int main() {
    int N;
    cin >> N;
    
    vector<vector<int>> a(N, vector<int>());
    for (int i = 0; i < N; i++) {
        a[i] = vector<int>(i + 1);
    }
    
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < i + 1; j++) {
            if (j == 0 || j == i)
                a[i][j] = 1;
            else
                a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
        }
    }
    
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < i + 1; j++) {
            cout << a[i][j] << " ";
        }
        cout << endl;
    }
    
    return 0;
}

C - K SwapC - K Swap

atcoderABC254场_第5张图片atcoderABC254场_第6张图片

题目大意

给定一个长度为N的序列A,以及一个整数K。可以执行以下操作零次或多次:选择一个满足1≤i≤N−K的整数i,交换ai和ai+K的值。判断是否可以对A进行升序排序。

思路分析

题目要求判断能否对A进行升序排序,可以看成是判断A是否已经排好序。排序后的A应该满足a1≤a2≤…≤aN。

  • 将N个元素按照模K的结果分组,共有K个组。
  • 对每个组进行降序排序。反向迭代器(rbegin(),rend())为了配合back();维持升序
  • 对A进行升序排序。
  • 遍历A,依次向新序列an中添加每个组的最后一个元素,并将其从原组中移除。
  • 判断排序后的A和an是否相等,如果相等则输出"Yes",否则输出"No"。

时间复杂度

O(NlogN)

代码

#include
using namespace std;
int main()
{
int n,k;
cin>>n>>k;
vector<vector<int>> b(k);
vector<int> a(n);
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> an;
for(int i=0;i<n;i++)
{
an.push_back(b[i%k].back());
b[i%k].pop_back();
}
if(a==an)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
return 0;
}

你可能感兴趣的:(算法)