Educational Codeforces Round 127 A~D

A 字符串的构建

给你一个字符串是否能够由:aa、aaa、bb、bbb构成。
解题思路:对比相邻两位是否一样,如果到最后两个及以上不一样了 就构不成了。

	string s;
    cin >> s;
    int len = s.length();
    bool flag = false;
    int cnt = 1;
    for (int i = 0; i < len; i++)
    {
    
    
      if (s[i] == s[i + 1])
        cnt += 1;
      else
      {
    
    
        if (cnt > 1)
        {
    
    
          cnt = 1;
        }
        else
        {
    
    
          cnt = 0;
          break;
        }
      }
    }
    cout << ((cnt == 0) ? "NO" : "YES") << endl;

收获:无,毕竟是水题。

B. 连续积分段

题目大意:坐标轴上有n个点 ,每个点都可以向左或向右调整一位,问是否能调整成一个连续的区间。
解题思路:若能构成连续的区间,总数上肯定是满足首位减去末尾小于等于n-1。

  	cin >> n;
   rep(i,1,n)
   cin >> a[i];
   if(a[n]-a[1]<=n+1)
   cout<<"YES"<<endl;
   else
   cout<<"NO"<<endl;

收获:若是我平时可能会直接暴力写了,有时候做连续区间问题的时候,可以在首末位上找一些数学关系。

C. 甜蜜生活

题目大意:n个商店卖糖,每天只卖一包。 你每天都有x元去买糖,每天可以买多个店的。问最多买几包。
解题思路:没什么特殊技巧 贪心思想罢了。

	cin >> n >> x;
    rep(i, 0, n - 1)
            cin >>a[i];
    sort(a, a + n);
    b[0] = a[0];
    for (int i = 1; i < n; i++)
    {
    
    
      b[i] = b[i - 1] + a[i];
    }
    int temp, ans = 0;
    for (int i = 0; i < n; i++)
    {
    
    
      temp = x - b[i] + i + 1;
      c[i] = temp / (i + 1);
      if (c[i] <= 0)
      {
    
    
        c[i] = 0;
      }
      ans += c[i];
    }
    cout << ans << endl;

收获:练习了贪心但收获不大。

D. 插入进度

题意:
给定一个数组 ,现在你需要往里面插入1~x 。使得相邻两项之差的绝对值之和最小。
即最小化: ∑ i = 0 n \sum_{i=0}^n i=0n ∣ \mid a[i] - a[i-1] ∣ \mid

解题思路:
发现插入x的值若是在a[i]⩽a[i-1]之间 对最后结果没有起到任何的作用。
在这里插入图片描述
后面贴图的没有想出来 引用严格鸽的思路讲解。记录一下这一道题确实让我学习到了相关知识。

int fun(int x) {
    
    
    int res = min(abs(a[1] - x), abs(a[n] - x));
    for (int i = 2; i <= n; i++) {
    
    
        res = min(res, abs(a[i] - x) + abs(a[i - 1] - x) - abs(a[i] - a[i - 1]));
    }
    return res;
}
void slove() {
    
    
    cin >> n; int x; cin >> x;
    for (int i = 1; i <= n; i++)cin >> a[i];
    int ans = 0;
    for (int i = 2; i <= n; i++)ans += abs(a[i] - a[i - 1]);
    ans += fun(1);
    if (*max_element(a + 1, a + 1 + n) < x)ans += fun(x);
    cout << ans << endl;
}

总结:这一场是关于贪心、数学的数轴插入场。D题做下来还是很大收获的,等我实力再好点就把E给补了。另外要感谢严格鸽每场的讲解让我收获颇丰。

猜你喜欢

转载自blog.csdn.net/qq_45148277/article/details/126257295