排序的练习题
今天LITTLESUN终于可以闯排序的关了!
先是刷了一道水题试炼一下STL的快排,顺便练习了一下约分(求最大公约数)的技能。
T1 洛谷P1888三角函数 题目链接:https://www.luogu.org/problemnew/show/P1888
这道题如果注意到题目中的条件是勾股数很快就可以A掉,但如果惯性思维的用余弦定理来转换为正弦定理。在计算过程中会有部分测试点的数据范围直接把long long炸掉。
LITTLESUN的代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
int A[5];
for(int i=1;i<=3;i++)
{
scanf("%d",&A[i]);
}
sort(A,A+2);
int css=A[2]*A[2]+A[3]*A[3]-A[1]*A[1];
int csx=2*A[2]*A[3];
css=css/__gcd(css,csx);
csx=csx/__gcd(css,csx);
cout<<css<<"/"<<csx;
return 0;
}
T2 洛谷P1866编号 题目链接:https://www.luogu.org/problemnew/show/P1866
这道题也只是简单的用了STL中的快排,这道题中的“mod 1000000007”非常关键,我们不能直接让结果mod 1000000007,因为在过程中数据就足以炸掉long long。根据加减乘的运算中过程先mod对结果不造成影响。所以我们应该在计算中每一步都mod 1000000007。
LITTLESUN的代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define MAXN 10000
using namespace std;
int A[MAXN];
int main()
{
int N;
scanf("%d",&N);
for(int i=1;i<=N;i++)
{
scanf("%d",&A[i]);
}
sort(A+1,A+N+1);
long long num=1;
bool a=0;
for(int i=1;i<=N;i++)
{
num=num*(A[i]-(i-1));
num=num%1000000007;
a=1;
}
if(a==1)
{
printf("%lld",num);
}
else
{
printf("0");
}
return 0;
}
T3 洛谷P1125笨小猴 题目链接:https://www.luogu.org/problemnew/show/P1125
这道题用到的是桶排序,注意在将字符串转化后数字应存在数组中。在判断是否为素数时要记得考虑0和1 的特殊情况。
LITTLESUN的代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define MAXN 10010
using namespace std;
char A[MAXN];
int B[MAXN]={0},a[MAXN];
bool pd(int i)
{
int k=2;
for(;k<=sqrt(i)&&i%k!=0;k++);
if(k>sqrt(i)&&i!=1&&i!=0)return 1;
else return 0;
}
int main()
{
scanf("%s",A);
for(int i=0;i<strlen(A);i++)
{
a[i]=A[i]-'a';
}
for(int i=0;i<strlen(A);i++)
{
B[a[i]]++;
}
//printf("%d",B[4]);
int maxn=-1;
int minn=500;
for(int i=0;i<=25;i++)
{
if(B[i]>maxn)
{
maxn=B[i];
}
if(B[i]<minn&&B[i]!=0)
{
minn=B[i];
}
}
//printf("%d%d",maxn,minn);
int num=maxn-minn;
if(pd(num))
{
printf("Lucky Word\n");
printf("%d",num);
}
else
{
printf("No Answer\n");
printf("0");
}
return 0;
}
先暂时整理到这里了,之后再做到有关排序的简单题还会继续更新。