AtCoder Beginner Contest 337
1.AtCoder Beginner Contest 337
2.AtCoder Beginner Contest 339 赛后总结(痛苦的一次)3.ABC355 D区间相交问题4.Atcoder3565.Atcoder357 D(逆元和快速幂)6.ABC359赛后总结
A题不多说,纯水。
B题对题目要求没有理解太透(不知道是英语问题,还是它样例给的不够全,没太能理解最后的那个判断结果)
卡c题上了
c题感觉其实是个比较有意思的题,但是只要理解了题目就知道本质是一个求数组对应的下标,再以数组的下标所对应的数组值来求下一个下标。
- 我的错误思路
我一开始没太完全看懂样例,和它给的数组条件,我以为数组的值是除-1这个特定值去都是依次递增了,但样例3就有揭示这个问题,我看半天没看出来,想用sort排序来寻找下标对应的值的下标。 - 正确思路
通过观摩别人的解答,收获了一种新思路。
应该放弃第一个特殊值-1,正常是通过首位数-1再去求它的下标,然后再找-1的下标对应的数组值得下标,重复这个过程。但其实由于首位是固定的,转换思路,以-1的下标去求值再得新下标,重复。
因为数组的值是需要遍历才能知道的,而下标可以直接定位所在的值。
这样我们就有种新的数组方式存储数组
将数组的值为下标,原本的下标变为值,这样我们就可以以值为下标的方式直接调用出下一个的下标。
代码:
#include <iostream>
using namespace std;
int r[1000000];
int main(){
int n;
cin >> n;
int s;
int next;
for (int i = 1; i <= n; i++){
cin >> s;
r[s] = i;
if (s == -1){
cout << i << " ";
next = i;
}
}
for (int i = 2; i <= n; i++){
cout << r[next] << " ";
next = r[next];
}
cout << endl;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?