三大水题一起写,方便基础不好的同学学习(好像并没有)

B. 牛牛爱数学

Solution

发现这个式子是个完全平方公式,所以有
所以答案就是
不整除的话就是-1

#include<bits/stdc++.h>
typedef long long ll;
const int N = 1e6 + 5;
using namespace std;
int main() {
  ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
  int t;
  cin >> t;
  while(t--) {
    ll a, b, c;
    cin >> a >> b >> c;
    ll p = b * c;
    if(p % a != 0) cout << -1 << "\n";
    else cout << p / a << "\n";
  }
  return 0;
}

G 牛牛爱几何

Solution

画个图你就懂了
图片说明
黑色部分为一个半圆减去一个三角形,算八个就行。

#include<bits/stdc++.h>
typedef long long ll;
const int N = 1e6 + 5;
using namespace std;
int main() {
  ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr); 
  ll n;
  while(cin >> n) {
    double pi = acos(-1.0);
    double r = n / 2.0;
    cout << fixed << setprecision(6) << pi * r * r - (n * n - r * r * pi) << "\n";
  }
  return 0;
}

J.牛牛喜欢字符串

Solution

对于整个字符串一共会被分成 段,那么对于每一个位置 计算字符出现频率最高的
然后每个位需要 次变换。

#include<bits/stdc++.h>
typedef long long ll;
const int N = 1e6 + 5;
using namespace std;
int sum[N][26];
int main() {
  ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
  int n, k;
  string s;
  cin >> n >> k >> s;
  for(int i = 0; i < s.size(); i++) {
    sum[i % k][s[i] - 'a']++;
  }
  int num = n / k;
  ll ans = 0;
  for(int i = 0; i < k; i++) {
    int maxz=  0;
    for(int j = 0; j < 26; j++) {
      maxz = max(maxz, sum[i][j]);
    }
    ans += num - maxz;
  }
  cout << ans << "\n";
  return 0;
}