AtcoderABC224场

A - TiresA - Tires

在这里插入图片描述在这里插入图片描述

题目大意

题目要求判断给定字符串S的末尾是以"er"还是"ist"结尾,并输出对应的结果。

思路分析

使用substr函数获取字符串S的末尾2个字符或3个字符。
判断获取到的子字符串是否等于"er"或"ist",如果相等则输出对应的结果。

时间复杂度度

O(1)

AC代码

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s;
    cin >> s;
    if (s.substr(s.size() - 2, 2) == "er") {
        cout << "er";
    }
    else if (s.substr(s.size() - 3, 3) == "ist") {
        cout << "ist";
    }
    return 0;
}

B - MongenessB - Mongeness

在这里插入图片描述在这里插入图片描述在这里插入图片描述

题目大意

给定一个H行W列的矩阵,每个格子中包含一个整数。判断是否满足以下条件:对于任意一组不同的行和列,其交换的元素之和小于等于原来的元素之和。

思路分析

为了判断是否满足条件,可以使用四重嵌套循环来遍历所有可能的两对不同的行和两对不同的列的组合。对于每一组组合,比较交换后的元素之和和原来的元素之和。如果存在交换后的元素之和大于原来的元素之和的情况,则不满足条件输出"No",否则输出"Yes"。

  • 此处不可用两重循环
  • 这样会导致一个错误的假设:每个外层循环的i_1值只会对应一个特定的内层循环的i_2值。然而,实际上,内层循环的i_2值和外层循环的i_1值无关,内层循环中的i_2值应该与i_1值无关。
  • 四重循环可以控制不同行不同列,遍历所有可能的两对不同的行和两对不同的列的组合。

时间复杂度度

O(H2 * W2

AC代码

#include <iostream>
using namespace std;

int main(void)
{
  int h, w;
  int a[51][51];
  cin >> h >> w;
  for(int i = 1; i <= h; i++){
    for(int j = 1; j <= w; j++){
      cin >> a[i][j];
    }
  }
  for(int i_1 = 1; i_1 <= h; i_1++){
    for(int i_2 = i_1+1; i_2 <= h; i_2++){
      for(int j_1 = 1; j_1 <= w; j_1++){
        for(int j_2 = j_1+1; j_2 <= w; j_2++){
          if(a[i_1][j_1] + a[i_2][j_2] > a[i_2][j_1] + a[i_1][j_2]){
            cout << "No" << endl;
            return 0;
          }
        }
      }
    }
  }
  cout << "Yes" << endl;
  return 0;
}

C - Triangle?C - Triangle?

在这里插入图片描述在这里插入图片描述

题目大意

在平面坐标系中,有N个点,编号从1到N。第i个点的坐标为(Xi, Yi)。任意两个不同的点位于不同的位置。
找出选择其中三个点的方式数,使得连接这三个点的线段构成一个面积大于0的三角形。

思路分析

对于N个点,我们使用三重嵌套循环来遍历所有可能的三个点的组合。对于每一组组合,通过计算这三个点形成的三角形的面积来判断是否大于0。如果大于0,则计数器res加一。

  • 关于计算三角形的面积,可以使用行列式的方法,即通过以下公式计算:
    |(p[j].first-p[i].first)(p[k].second-p[i].second)-(p[k].first-p[i].first)(p[j].second-p[i].second)|
  • 其中p[i]、p[j]、p[k]分别表示第i、j、k个点的坐标,如果上述行列式结果不等于0,则说明这三个点形成的三角形的面积大于0。

时间复杂度度

O(N3)

AC代码

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main()
{
  int n;
  cin>>n;
  vector<pair<ll,ll>>p(n); 
  for(auto &nx:p){
    cin>>nx.first>>nx.second;
  }
  int res=0; 
  // 遍历所有可能的三个点的组合
  for(int i=0;i<n;i++){
    for(int j=i+1;j<n;j++){
      for(int k=j+1;k<n;k++){
        // 计算三角形的面积,判断是否大于0
        if((p[j].first-p[i].first)*(p[k].second-p[i].second)-(p[k].first-p[i].first)*(p[j].second-p[i].second)!=0){
          res++; 
        }
      }
    }
  }
  cout<<res<<endl; 
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值