【HT-048-Div.4】核桃新手组周赛个人题解

· · 题解

0.序言

差一点AK 100+95+100+100=395

T1

签到题万年模拟

#include <bits/stdc++.h>
using namespace std;
long long a, b;
int main()
{
    cin >> a >> b;
    if(a>b) cout<<a*50-b*10+500;
    else cout << a*50-10*b;
}

T2

循环累加每个梯形面积即可。注意浮点。

应该没有人不知道梯形面积公式吧(小声

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n;
    cin >> n;
    vector<int> h(n + 1);
    for (int i = 0; i <= n; ++i) cin >> h[i];
    vector<int> w(n);
    for (int i = 0; i < n; ++i) cin >> w[i];
    double s = 0.0;
    for (int i = 0; i < n; ++i) s += (h[i] + h[i + 1]) * w[i] / 2.0;
    cout << fixed << setprecision(1) << s << endl;
    return 0;
}

T3

模拟变换过程即可。

#include <bits/stdc++.h>
using namespace std;
int a=1, b=2, c=3, d=4;
string s;
int main()
{
    cin >> s;
    for(int i = 0; i < s.length(); i++)
    {
        if(s[i] == 'H')
        {
            int t1 = a, t2 = b;
            a=c,b=d,c=t1,d=t2;
        }
        else
        {
            int t1 = a, t2 = c;
            a=b,c=d,b=t1,d=t2;
        }
    }
    cout << a <<" "<<b<<endl<<c<<" "<<d;
}

T4

分情况+循环判断四个方向哪一个满足从左到右、从上到下严格上升即可。

代码有点石。

#include <bits/stdc++.h>
using namespace std;
int n, a[105][105];
int main()
{
    cin >> n;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++) cin>>a[i][j];
    bool f = 1;
    for (int i = 1; i <= n; i++){
        for (int j = 1; j < n; j++)
            if (a[i][j] > a[i][j+1]) {f=0;break;}
            if(!f)break;
    }
    for (int i = 1; i <= n; i++){
        for (int j = 1; j < n; j++)
            if (a[j][i] > a[j+1][i]) {f=0;break;}
            if(!f)break;
    }
    if (f) {
        for (int i = 1; i <= n; i++){
        for (int j = 1; j <= n; j++) cout<<a[i][j]<<" ";
        cout<<endl;}
        return 0;
    }
    f = 1;
    for (int i = 1; i <= n; i++){
        for (int j = n - 1; j >= 1; j--)
            if (a[i][j] < a[i][j+1]) {f=0;break;}
            if(!f)break;
    }
    for (int i = n; i >= 1; i--){
        for (int j = 1; j < n; j++)
            if (a[j][i] > a[j+1][i]) {f=0;break;}
            if(!f)break;
    }
    if (f) {
        for (int i = n; i >= 1; i--){
        for (int j = 1; j <= n; j++) cout<<a[j][i]<<" ";
        cout<<endl;}
        return 0;
    }
    f = 1;
    for (int i = n; i >= 1; i--){
        for (int j = n - 1; j >= 1; j--)
            if (a[i][j] < a[i][j+1]) {f=0;break;}
            if(!f)break;
    }
    for (int i = n; i >= 1; i--){
        for (int j = n - 1; j >= 1; j--)
            if (a[j][i] < a[j+1][i]) {f=0;break;}
            if(!f)break;
    }
    if (f) {
        for (int i = n; i >= 1; i--){
        for (int j = n; j >= 1; j--) cout<<a[i][j]<<" ";
        cout<<endl;}
        return 0;
    }
    f = 1;
    for (int i = 1; i <= n; i++){
        for (int j = 1; j < n; j++)
            if (a[j][i] < a[j+1][i]) {f=0;break;}
            if(!f)break;
    }
    for (int i = 1; i <= n; i++){
        for (int j = 1; j < n; j++)
            if (a[i][j] > a[i][j+1]) {f=0;break;}
            if(!f)break;
    }
    if (f) {
        for (int i = 1; i <= n; i++){
        for (int j = n; j >= 1; j--) cout<<a[j][i]<<" ";
        cout<<endl;}
        return 0;
    }
}