AtcoderABC238场

A - Exponential or QuadraticA - Exponential or Quadratic

AtcoderABC238场_第1张图片

题目大意

给定一个整数 n,判断是否满足 2n >n 2

思路分析

根据数学知识可知n 的取值在 2 到 4 之间(包括 2 和 4),不满足条件 。

时间复杂度

O(1)

AC代码

#include
using namespace std;

int main() {
    int n;
    cin >> n;

    if (2 <= n && n <= 4) {
        cout << "No" << endl;
    } else {
        cout << "Yes" << endl;
    }

    return 0;
}

B - PizzaB - Pizza

AtcoderABC238场_第2张图片AtcoderABC238场_第3张图片AtcoderABC238场_第4张图片

题目大意

这道题目给出了一个圆形的披萨。Takahashi会按照一定的顺序切割这个披萨,切割过程如下:
首先,在12点钟方向从中心开始切割。
然后,进行N次操作。第i次操作如下:
*将披萨顺时针旋转Ai度。

  • 在12点钟方向从中心开始切割。
    要求找到切割过程中最大披萨的中心角度。

思路分析

标记每个切口,遍历每个角度,统计每个切口(标记)之间的距离,找出最大的每个。

时间复杂度

O(n)

AC代码

#include

using namespace std;

int main(){
  int n;
  cin >> n;
  
  vector<bool> fl(360,false); // 用于记录每个角度是否被切割到

  fl[0]=true; // 初始时将0度设置为已切割

  int p=0; // 当前披萨的中心角度

  for(int i=0;i<n;i++){
    int a;
    cin >> a;

    p+=a; // 更新当前披萨的中心角度
    p%=360; // 确保角度在0-359之间

    fl[p]=true; // 将当前披萨的中心角度设置为已切割
  }

  int res=0,cur=0; // res用于保存最大的中心角度值,cur用于记录当前连续未切割的角度数量

  for(int i=0;i<=360;i++){
    if(fl[i%360]){ // 如果当前角度已被切割到
      res=max(res,cur); // 更新最大中心角度值
      cur=0; // 重置连续未切割的角度数量为0
    }
    cur++; // 更新连续未切割的角度数量
  }

  cout << res << '\n'; // 输出最大中心角度值

  return 0;
}

C - digitnumC - digitnum

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

题目大意

题目要求计算f(1)+f(2)+⋯+f(N)的结果,其中f(x)表示不超过x且与x位数相同的正整数的个数。需要将最终结果对998244353取模。

思路分析

通过分析题目给定的示例和问题描述,可以发现每一位上满足条件的正整数个数形成了一个三角数序列。而三角数序列有一个通项公式,可以快速计算出结果。因此,可以利用这个特性来解决问题。

知识点

  • 三角数:通过计算三角数的性质,可以得到每一位上满足条件的正整数个数的通项公式。

时间复杂度

O(logN)

AC代码

#include
#define mod 998244353
#define inv2 499122177
using ll=long long;
using namespace std;

ll triangular_number(ll x){
  x %= mod;
  ll res = x;
  res *= (x + 1);
  res %= mod;
  res *= inv2;
  res %= mod;
  return res;
}

int main() {
  ll n;
  cin >> n;
  
  ll res = 0;
  ll p10 = 10;
  for(int dg = 1; dg <= 18; dg++) {
    ll l = p10 / 10;
    ll r = min(n, p10 - 1);
    if(l <= r) {
      res += triangular_number(r - l + 1);
      res %= mod;
    }
    p10 *= 10;
  }
  
  cout << res << '\n';
  return 0;
}

你可能感兴趣的:(redis,数据库,缓存,算法)