2019年1月31日训练日记

今天做的题目比较少,发现不会的有点多。。。
今天写两个题目:2129逆置换,2119 吃龙虾。

2129逆置换

输入一个1到n的排列,p[1], p[2], …, p[n],
即1到n都出现了1次的一个长度为n的数组p。
对于每个满足1 <= i <= n的i,求下标j使得p[j] = i。
1 <= n <= 100000
输入
第一行一个整数n,表示排列长度
接下来n行,每行一个整数p[i],表示排列的内容。
输出
第一行输出一个排列长度n,为了方便造数据。
输出共n行,其中第i行包含一个整数j,使得p[j]=i。
输入样例

4
4
3
1
2

输出样例

4
3
4
2
1

代码一:

#include<iostream>
#include<stdio.h>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#include<vector>
#include<iomanip>
using namespace std;
int a[100001];
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    cin>>a[i];
    cout<<n<<endl;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(a[j]==i)
            cout<<j<<endl;
            continue;
        }
    }
    return 0;
}

超时。。。

代码二:

#include<iostream>
#include<stdio.h>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#include<vector>
using namespace std;
int main()
{
    int n;
    int a[100001],b[100001];
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        b[a[i]]=i;
    }
    cout<<n<<endl;
    for(int i=1;i<=n;i++)
        cout<<b[i]<<endl;
    return 0;
}

2119 吃龙虾

小瓜非常喜欢吃龙虾,一个阳光明媚的星期天早晨,他来到海鲜市场采购龙虾。海鲜市场里一共有n只龙虾,每只龙虾重ai克。由于小瓜非常挑剔,他只吃重大于等于m克的龙虾,于是他打算把所有重大于等于m克的龙虾买回家。请你帮小瓜算一下他一共将会买多少克龙虾。
输入
第一行两个整数n(1<=n<=100000),m(1 <=m <= 100000),表示市场中有n只龙虾,小瓜只吃重大于等于m克的龙虾。
接下来n行,每行一个整数ai(0<=ai<100000),表示第i只龙虾重ai克。
输出
一行一个整数,表示小瓜最后一共会买的龙虾的克数。
输入样例

5 5
4
6
2
3
8

输出样例

14

代码如下:

#include<iostream>
#include<stdio.h>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#include<vector>
#include<iomanip>
using namespace std;
int h[100001];
int main()
{
    int a,b;
    long long s=0;
    cin>>a>>b;
    for(int i=1;i<=a;i++)
        cin>>h[i];
    for(int i=1;i<=a;i++)
    {
        if(h[i]>=b)
            s+=h[i];
    }
    cout<<s<<endl;
    return 0;
}

此题代码中的s要定义为long long 形式,定义为int有一组数据越界了,会出现错误。
其中那组数据好大。。。
本想复制粘贴一下。。。无奈数据太多太大,网页直接卡死。。。

原文地址:https://www.cnblogs.com/study-hard-forever/p/12130070.html