T1002-翊(范怡鑫) A-有序序列合并 解析: 创建一个数组,将两个序列分别存入数组,先存第一个序列,在第一个序列后存入第二个序列。再用sort函数将新数组升序排序。 代码:
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1000;
int a[2*N];
int n,m,i;
int main()
{
cin>>n>>m;
for(i=0;i<n;i++)
cin>>a[i];
for(i=n;i<n+m;i++)
cin>>a[i];
sort(a,a+n+m);
for(i=0;i<n+m;i++)
cout<<a[i]<<' ';
cout<<endl;
return 0;
}
B-Dragon 解析: 这道题的实质是将四个数从大到小排序,用sort函数排序之后再用逐位乘法得到一个四位数。 代码:
#include<iostream>
#include<algorithm>
using namespace std;
int a[4];
int i,s;
int cmp(int x,int y)
{
return x>y;
}
int main()
{
for(i=0;i<4;i++)
cin>>a[i];
sort(a,a+4,cmp);
for(i=0;i<4;i++)
{
s*=10;
s+=a[i];
}
cout<<s<<endl;
}
C-花样方阵 解析: 该题首先要求每名同学需要花费的时间,即所走步数,为横向步数与纵向步数之和,步数为相应坐标之差。将所有同学花费时间存入数组,再用sort函数将数组降序排序,排序后数组第一个元素即为所需时间。 代码:
#include<iostream>
#include<map>
#include<algorithm>
using namespace std;
int T,n,i,j,x,y,a[4];
int dev(int x,int y)
{
if(x>y) return x-y;
else return y-x;
}
int cmp(int x,int y)
{
return x>y;
}
int main()
{
cin>>T;
while(T>0)
{
cin>>n;
int step[n];
for(i=0;i<n;i++)
{
for(j=0;j<4;j++)
cin>>a[j];
x=dev(a[0],a[2]);
y=dev(a[1],a[3]);
step[i]=x+y;
}
sort(step,step+n,cmp);
cout<<step[0]<<endl;
T--;
}
return 0;
}
D-不重复数字 解析: 从数组第一个元素开始和之前元素进行比较,若之前没有重复元素,则将该元素对应数值存入数组开头,r为新存入数组长度,以此类推,每存入一个数值,r自加一次,最后输出数组前r个元素。 代码:
#include<iostream>
using namespace std;
int T,n,i,j,r=0;
int main()
{
cin>>T;
while(T>0)
{
T--;
cin>>n;
int a[n];
for(i=0;i<n;i++)
{
cin>>a[i];
}
for(i=0;i<n;i++)
{
for(j=0;j<r;j++)
if(a[j]==a[i]) break;
if(j==r)
a[r++]=a[i];
}
for(i=0;i<r;i++)
cout<<a[i]<<' ';
cout<<endl;
r=0;
}
return 0;
}
E-小H和迷宫 解析: 将三个整数存入数组,用sort函数将该数组降序排序,依次用怪兽剩余血量与相应百分数相乘,得到最终血量,初始血量减去最终血量即为最多扣减血量。 代码:
#include<iostream>
#include<algorithm>
using namespace std;
int N,blood,i,kill,a[3];
int cmp(int x,int y)
{
return x>y;
}
int main()
{
cin>>N;
blood=N;
for(i=0;i<3;i++)
cin>>a[i];
sort(a,a+3,cmp);
for(i=0;i<3;i++)
blood=blood*(100-a[i])/100;
kill=N-blood;
cout<<kill;
return 0;
}
F-主持人的烦恼 解析: 将n位同学的颜值存入数组,再将该数组用sort函数升序排序,如果相邻同学的研制差小于m,则组数加一,向后顺延两位同学,如果颜值差大于等于m,则组数不变,向后顺延一位同学。 代码:
#include<iostream>
#include<algorithm>
using namespace std;
int n,i,num;
long long int m;
int main()
{
while(cin>>n)
{
num=0;
cin>>m;
long long int a[n];
for(i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
for(i=0;i<n-1;i++)
{
if(a[i+1]-a[i]<m)
{
num++;
i++;
}
}
cout<<num<<endl;
}
return 0;
}
G-栗酱的文明2 解析: 将n个国家拥有的土地数量存入数组,从下标为1的元素开始存,则下标代表第几个国家。用sort函数将该下标从1开始的数组降序排序,如果第i个国家拥有的土地数不大于i-1,则无法建立外交关系,以此类推,最终的i值即为能建立最多数量外交关系的国家。若i为1,则无法建立外交关系。 代码:
#include<algorithm>
using namespace std;
int T,ans,n,i;
int cmp(int x,int y)
{
return x>y;
}
int main()
{
cin>>T;
while(T>0)
{
ans=0;
T--;
cin>>n;
int a[n+1];
for(i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n,cmp);
for(i=1;i<=n;i++)
{
if(a[i]<=i-1) break;
ans=i;
}
if(i==1) cout<<0<<endl;
else cout<<ans<<endl;
}
return 0;
}
H-小龙的秘密 解析: 将两个字符串用sort函数排序,再将排序好的字符串比较,若相同,则没有异常,若不同,则有异常。 代码:
#include<algorithm>
#include<cstring>
using namespace std;
string str1,str2;
int main()
{
cin>>str1>>str2;
sort(str1.begin(),str1.end());
sort(str2.begin(),str2.end());
if(str1==str2) cout<<"^_^"<<endl;
else cout<<"-_-#"<<endl;
return 0;
}
I-Laptop 解析: 将笔记本的内存和速度相对应地存入两个数组,在两个数组内依次比较内存和速度,如果该笔记本的内存和速度同时小于某一笔记本,则被“完虐”的笔记本数自加一次。 代码:
#include<algorithm>
using namespace std;
int n,i,j,ans;
int main()
{
cin>>n;
int m[n],s[n];
for(i=0;i<n;i++)
cin>>m[i]>>s[i];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(m[i]<m[j]&&s[i]<s[j])
{
ans++;
break;
}
}
cout<<ans<<endl;
return 0;
}