题意:有n个人,每个人都有一个分数,在给他们发文凭的时候要遵守下面的规则,1
1:至少有一个人得到文凭;
2:得零分的不得到文凭;
3:如果一个人得到了文凭,那么比他分高的人都要得到文凭;
问有多少种发放文凭的方法;
思路:用set去重就好了;
下面附上我的代码:
#include<bits/stdc++.h>
#include<set>
using namespace std;
set<int> sk;
int main()
{
int n,a;
cin>>n;
for(int i=0;i<n;i++)
{
scanf("%d",&a);
if(a)
sk.insert(a);
}
printf("%d\n",sk.size());
return 0;
}
题意:找出一个尽量大的数,不能大于y,使其不被2-p中的数整除;(大概这个意思。。。)
思路:从y开始找,判定一下是不是素数即可;
下面附上我的代码:
#include<bits/stdc++.h>
using namespace std;
int p,y;
bool f(int k)
{
for(int i=2;i*i<=k&&i<=p;i++)
{
if(k%i==0)
return false;
}
return true;
}
int main()
{
cin>>p>>y;
for(int i=y;i>p;i--)
if(f(i))
{
printf("%d\n",i);
return 0;
}
printf("-1\n");
return 0;
}
题意:一个人要做火鸡,他家厨房的炉子每隔k分钟,温度就变成原来的一半,他每隔d分钟去一趟厨房修复,做好一只火鸡要t分钟,问最少要多长时间才能做好;
思路:找出周期,和周期内的实际烧的时间,模拟一下就好了
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
using namespace std;
typedef long long LL;
LL k,d;
double t;
int main()
{
cin>>k>>d>>t;
LL l=k/d*d;
if(l<k)
l+=d;//判断周期
double x=(double)(l-k)/2+k;//实际烧的时间
LL i=0;
double h=0.0;
i=(LL)t/x;
h=i*x;
double p=t-h;
//printf("%lf %d %lf\n",h,i,p);
if(p<=k)
printf("%.1lf\n",l*i+p);//判断最后周期内剩余时间是在正常时间内还是在关闭的时间内
else
printf("%.1f\n",l*i+k+(p-k)*2);//在k分钟外的话要用两倍的时间
return 0;
}