AtCoder_abc335
A、2023
跳转原题点击此:A题地址
1、题目大意
给你一个字符串,要你对该字符串的最后一个字符改为4。
2、题目解析
直接通过string的性质即可,直接更改string的最后一个字符即可。
3、具体代码
#include<bits/stdc++.h>
using namespace std;
int T;
string s;
void solve()
{
cin >> s;
s[s.size() - 1] = '4';
cout << s << endl;
}
int main()
{
solve();
return 0;
}
B、Tetrahedral Number
跳转原题点击此:B题地址
1、题目大意
生成一个类似全排列的序列。即对给定的n生成0∼n的3元全排列。其要求是a+b+c≤n,
且,对于新的全排列(x,y,z)和前一个全排列(x',y',z')的要求是:
- x<x′;
- x=x′ and y<y′;
- x=x′ and y=y′ and z<z′。
2、题目解析
由于只有三位且n的范围只有22,所以直接通过暴力枚举即可。当然注意具体要求即可。
3、具体代码
#include<bits/stdc++.h>
using namespace std;
int n;
int a, b, c;
void solve()
{
scanf("%d", &n);
a = b = c = -1; // 更新为上一个的全排列
for(int i = 0; i <= n; i++)
{
for(int j = 0; j <= n; j++)
{
for(int k = 0; k <= n; k++)
{
if(i + j + k > n)
continue;
if(i > a || j > b || k > c)
printf("%d %d %d\n", i, j, k);
a = i, b = j, c = k; // 更新为上一个的全排列
}
}
}
}
int main()
{
solve();
return 0;
}
C、Loong Tracking
跳转原题点击此:C题地址
1、题目大意
一条龙在x轴上,龙头坐标点为(1,0),给定你若干个处理条件和查询条件:
1、给定四个方位(上、下、左、右)中的其中一个,随后龙头按照该方位移动一格,其身后的其他格子也跟随移动。
2、查询模块即查询最开始的身体的某个格子在经过几个操作后(可能为零个)后在哪里。
2、题目解析
只要创建一个pair的数组,将通过四个方位移动后的几个操作都按照顺序存入该数组即可。随后记录在每个查询前经过的多少次移动操作,即移动操作数量就是之后的新区域的坐标:注意新的坐标可能是最开始已经被占据的点,也可能是四个方位新生成的点,具体看代码:
3、具体代码
#include<bits/stdc++.h>
using namespace std;
#define _1 first
#define _2 second
typedef long long ll;
typedef pair<int, int>pii;
const int N = 2e5+10;
int n, q;
pii f[N];
void solve()
{
int x = 1, y = 0, sum = 0, cnt = 0;
cin >> q >> n;
for(int i = 1; i <= n; i++)
{
int tmp;
cin >> tmp;
if(tmp == 1)
{
char ss;
cin >> ss;
if(ss == 'D')
y--;
else if(ss == 'U')
y++;
else if(ss == 'L')
x--;
else if(ss == 'R')
x++;
sum++;
f[cnt ++] = {x, y};
}
else
{
int loc;
cin >> loc;
if(sum < loc) // 如果该查询之前的总操作数是在原先已经被占据的坐标点上
cout << loc - sum << " " << 0 << endl;
else // 如果该查询之前的总操作数是在新生成的坐标点上
{
cout << f[sum - loc]._1 << " " << f[sum - loc]._2 << endl;
}
}
}
}
int main()
{
solve();
return 0;
}
D、 Loong and Takahashi
跳转原题点击此:D题地址
1、题目大意
原文的意思比较难翻译,换句话说就是生成一个螺旋递增向内的正方形,其中正方形最中心要更新为字符'T'。
2、题目解析
先生成一个螺旋递增向内的正方形,然后将中心换为T即可。
生成思路:将正方形分别看出若干个正方形环包围的图形:依次按照上、右、下、左地生成正方形地四条边。注意:会有重复点,所以要剔除。
3、具体代码
#include<bits/stdc++.h>
using namespace std;
const int M = 50;
int T;
int n, m, idx = 1;
int f[M][M];
void solve()
{
cin >> n;
m = n / 2 + 1;
for(int i = 1; i <= m; i++)
{
for(int j = i; j <= n - i + 1; j++) // 上面一行
f[i][j] = idx++;
for(int j = i + 1; j <= n - i + 1; j++) // 右边一列
f[j][n - i + 1] = idx++;
for(int j = n - i; j >= i; j--) // 下面一行
f[n - i + 1][j] = idx++;
for(int j = n - i; j > i; j--) // 左边一行
f[j][i] = idx++;
}
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
{
if(i == m && j == m)
{
cout << "T" << " ";
continue;
}
cout << f[i][j] << " ";
}
cout << endl;
}
}
int main()
{
solve();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧