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;
}

京公网安备 11010502036488号