今天做的题目比较少,发现不会的有点多。。。
今天写两个题目: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有一组数据越界了,会出现错误。
其中那组数据好大。。。
本想复制粘贴一下。。。无奈数据太多太大,网页直接卡死。。。