#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=60;
const int INF=1000000000;
int n,m,a[maxn],sum[maxn];
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
cin>>a[i];
sort(a+1,a+m+1);
int min1=INF;
for(int i=1;i<=m-n+1;i++)
min1=min(min1,a[i+n-1]-a[i]);
cout<<min1<<endl;
return 0;
}
B - Routine Problem |
刚开始没太看明白题意,改了好半天,
只可能出现两种情况。即先把图像的长变为和框架的长一样或把图像的高变为和框架的高一样。两种情况比例分别为
(b*c-a*d)/(b*c)和(a*d-b*c)/(a*d)。因为b*c-a*d和a*d-b*c互为相反数所以取正的那个就行了。只是要注意答案要约分。还有分子为0的情况。分母必须为1。所以要特殊处理。
#include<cstdio>
int gcd(int a, int b)
{
return b > 0 ? gcd(b, a % b) : a;
}
int main(void)
{
int a, b, c, d, temp;
scanf("%d%d%d%d", &a, &b, &c, &d);
if (b * c - a * d > 0)
{
int p = b * c - a * d, q = b * c;
temp = gcd(p, q);
printf("%d/%d", p / temp, q / temp);
}
else if (a * d - b * c > 0)
{
int p = a * d - b * c, q = a * d;
temp = gcd(p, q);
printf("%d/%d", p / temp, q / temp);
}
else
printf("0/1");
return 0;
}
C - Quiz
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const long long MOD=1000000009LL;
long long n,m,k;
long long Pow(long long a,long long n)
{
long long res=1;
while(n>0)
{
if(n&1)res=res*a%MOD;
a=a*a%MOD;
n>>=1;
}
return res;
}
int main()
{
cin>>n>>m>>k;
long long sum=(k-1)*(n/k)+n%k;
if(sum>=m){cout<<m%MOD<<endl;return 0;}
long long b=m-sum;
sum-=b*(k-1);
long long an=4*k%MOD*Pow(2,b-1)%MOD;
an%=MOD;
an-=2*k;
an=(an+MOD)%MOD;
sum+=an;
sum=(sum+MOD)%MOD;
sum%=MOD;
cout<<sum<<endl;
return 0;
}