A
#include <bits/stdc++.h>
using namespace std;
#define int long long

const int INF = 1e9+7;
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
int n,m; 
int lx,ly,ex,ey;
int ans=INF;
vector<vector<int>>a;
vector<vector<vector<int>>>dp;

void dfs(int x,int y,int ans1,int hp){
    if(ans1>=ans)return;
    if(hp<=0||x<1||x>n||y<1||y>m||a[x][y]==0)return;//到边界或者,hp=0就返回
    if(x==ex&&y==ey){//到终点计算一次当前最小值
        ans=min(ans,ans1);
        return;
    }
    if(dp[x][y][hp]<=ans1)return;//剪枝-当前步骤大于已记忆的步骤数,就返回,代表未来的路径一定比记忆的路径步骤多
    dp[x][y][hp]=ans1;
    for(int i=0;i<4;i++){
        int xx=dx[i]+x;
        int yy=dy[i]+y;//四方搜索
        if(xx<1 || xx>n || yy<1 || yy>m || a[xx][yy]==0) continue;
        int nowhp=hp-1;//走一步hp--
        if(a[xx][yy]==4&&nowhp>0)nowhp=6;
        dfs(xx,yy,ans1+1,nowhp);
    }
}

void solve() {
    cin>>n>>m;
    a.resize(n+3,vector<int>(m+3));
    dp.resize(n+3, vector<vector<int>>(m+3, vector<int>(7, INF)));
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++){
            cin>>a[i][j];
            if(a[i][j]==2){
                lx=i,ly=j;//初始点
            }
            if(a[i][j]==3){
                ex=i,ey=j;//终点
            }
        }
    dfs(lx,ly,0,6);
    if(ans==INF)ans=-1;//代表到不了终点
    cout<<ans<<'\n';
}

signed main() {
    ios::sync_with_stdio(false); 
    cin.tie(0);
    int t=1;
    // cin >> t;
    while (t--) solve();
    return 0;
}
B
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int x,y,z;
    cin>>x>>y>>z;
    cout<<min(x+y,x+z);
}
C
#include <bits/stdc++.h>
using namespace std;
#define int long long

void solve() {
    int n;
    cin >> n;
    map<int, int>mp;
    for(int i=1;i<=n;i++) {
        int x;
        cin >> x;
        mp[x]++;//哈希存数量
    }
    int ans = 0;
    for(int i=1;i<=n;i++) {
        int cnt = 0;
        for (auto j : mp) {
            if (j.second >= i)cnt += i;
        }//暴力找点,i=1时符合1就1+1+1,为i=2时就2+2+2同理
        ans = max(ans, cnt);
    }
    cout << ans << '\n';
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    int t = 1;
    cin >> t;
    while (t--) solve();
    return 0;
}
D
#include <bits/stdc++.h>
using namespace std;
#define int long long

void solve() {
    int a, b, c;
    cin >> a >> b >> c;
    if (a < b && b < c)cout << "STAIR" << '\n';
    else if (a < b && b > c)cout << "PEAK" << '\n';
    else cout << "NONE" << '\n';
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    int t = 1;
    cin >> t;
    while (t--) solve();
    return 0;
}
E
#include <bits/stdc++.h>
using namespace std;
#define int long long

void solve() {
    int n;
    cin >> n;//建议大家尝试下各点坐标找规律,因为是矩形可以符合当前规律
    for (int i = 0; i < 2 * n; i++) {
        for (int j = 0; j < 2 * n; j++) {
            if ((i / 2 + j / 2) & 1)cout << '.';//为奇数
            else cout << "#";//为偶数
        }
        cout << '\n';
    }
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    int t = 1;
    cin >> t;
    while (t--) solve();
    return 0;
}
F
#include <bits/stdc++.h>
using namespace std;
#define int long long

void solve() {
    int ans=0;
    int n,x,y;
    cin>>n>>x>>y;//这题只看最大值,所以我们可以当成一个二次函数的图像来写,同理我们只要把严格大于Y的放最前面就好了
    for(int i=1;i<=n;i++){
        int a;
        cin>>a;
        if(a>y)ans++;//经过优化,我们不需要排序,只要找严格大于y的数记录次数就好了
    }
    cout<<3*ans<<'\n';
}

signed main() {
    ios::sync_with_stdio(false); 
    cin.tie(0);
    int t=1;
    // cin >> t;
    while (t--) solve();
    return 0;
}
G
#include <bits/stdc++.h>
using namespace std;
#define int long long

struct node{
    int aa,l;
};

bool cmp(node x,node y){
    return x.aa<y.aa;
}
//这题我们第一反应,a_i的点的位置是固定的但是我们要找递减序列,所以我们采用结构体排序
void solve() {
    int n;
    cin>>n;
    vector<node>a(n+1);
    vector<int>b(n+1);
        //题面要求是c_i=a_i*b_i*i
        //所以我们可以在输入a_i的时候让a_i*=i即可
    for(int i=1;i<=n;i++){
        cin>>a[i].aa;
        a[i].aa*=i;//等同于a_i*i
        a[i].l=i;
    }
    for(int i=1;i<=n;i++)cin>>b[i];
    sort(a.begin()+1,a.end(),cmp);
    sort(b.begin()+1,b.end());
    vector<int>ans(n+1);
    for(int i=1;i<=n;i++){
        ans[a[i].l]=b[i];//已知a_i.l是a_i原坐标位置,所以ans[a[i].l]是a_i的坐标位置,把b_i放进去就可以了
    }
    for(int i=1;i<=n;i++)cout<<ans[i]<<" ";
    cout<<'\n';
}

signed main() {
    ios::sync_with_stdio(false); 
    cin.tie(0);
    int t=1;
    //cin >> t;
    while (t--) solve();
    return 0;
}
H
#include <bits/stdc++.h>
using namespace std;
#define int long long
//这题很简单知道a&b<=min(a,b)就可以,可以自己推理
void solve() {
    int n;
    cin>>n;
    vector<int>a(n+1);
    for(int i=1;i<=n;i++)cin>>a[i];
    int ans=a[1];
    for(int i=2;i<=n;i++)ans&=a[i];
    cout<<ans<<'\n';
}

signed main() {
    ios::sync_with_stdio(false); 
    cin.tie(0);
    int t=1;
    // cin >> t;
    while (t--) solve();
    return 0;
}
I
#include <bits/stdc++.h>
using namespace std;
#define int long long

void solve() {
    int a,b;
    cin>>a>>b;
    int c=abs(a-b);
    c+=max(a,b);
    cout<<c<<'\n';
}

signed main() {
    ios::sync_with_stdio(false); 
    cin.tie(0);
    int t=1;
    // cin >> t;
    while (t--) solve();
    return 0;
}
J
#include <bits/stdc++.h>
using namespace std;
#define int long long
//^32是一种写法,因为a->A是符合增减32这个值所以xor异或就可以了
void solve() {
    string s,ans;
    cin>>s;
    for(char i:s){
        i^=32;
        ans+=i;
    }
    cout<<ans<<'\n';
}

signed main() {
    ios::sync_with_stdio(false); 
    cin.tie(0);
    int t=1;
    // cin >> t;
    while (t--) solve();
    return 0;
}