codeforces1073b

  题意的话,看原题英语,(英语不好,就不翻译了,主要讲一下我的解题方法)

  一开始看得一头雾水,但观察样例可以很快看出端倪,(没错,观察很重要),b数组中的元素与a数组中的元素一毛一样,只是位置不同;我们记ans数组为要输出的结果,ans[i]对应b[i],在a数组中找到与b[i]相同的a[i],从这个a[i]起往左数有多少个没被记录的a[i],记下个数,这个数值就是ans[i](当然,第一次记录时,肯定是往左数到第一个数值),这个过程,其实也是题意的模拟,也算水题,不过挺不错的,值得一做。话不多说,上两份代码,啃代码才是王道。

c++代码如下:

#include<bits/stdc++.h>
using namespace std;

const int M = 2e5 + 5;
int a[M];
int ans[M];
int main()
{
    int n,x;
        scanf("%d", &n);
        for (int i=1; i<=n; i++){
            scanf("%d", &x);
            a[x] = i;
        }
        int cur = 0;
        for (int i=1; i<=n; i++){
            scanf("%d", &x);
            ans[i] = (a[x] > cur) ? a[x] - cur : 0;
            cur = (a[x] > cur) ? a[x] : cur;
        }

        for (int i=1; i <= n; i++)
            printf("%d ", ans[i]);
        printf("\n");
        
}

python代码如下:

n = int(input())
c = [0]*(n+1)
a = list(map(int, input().split()))
for i in range(n):
    c[a[i]] = i+1
b = [int(x) for x in input().split()]
cur = 0
for i in b:
    print(max(c[i]-cur, 0), end = ' ')
    cur = max(c[i], cur)

  

猜你喜欢

转载自www.cnblogs.com/mifankai/p/9860397.html