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;
}