苹果消消乐,选择计算
苹果消消乐:
题目描述
有L个苹果和香蕉排成一条直线,其中有N个香蕉,你可以使用至多M次魔法道具将香蕉变成苹果,最后“最长的连续苹果数量”即为你本次苹果消消乐的得分。给定苹果和香蕉的排列,求你能获得的最大得分。
输入
第一行是3个整数N、M和L,表示香蕉的数量,魔法道具使用次数,以及苹果和香蕉的总数。第二行包含N个整数a1, a2, ... aN(1 <= a1 < a2 < ... < aN<= L),表示第a1, a2, ... aN个位置上摆放的是香蕉,其余位置摆放的都是苹果。
输出
输出通过使用魔法道具后你能获得的最大得分。样例输入 Copy
5 2 100 10 30 55 56 90
样例输出 Copy
59
提示
【样例1解释】消掉55和56两个香蕉,从31到89都是苹果,所以连续苹果数量为59
【数据范围】
对于30%的数据,1<=L<=100,0<=N,M<=10
对于70%的数据,1<=L<=50000,0<=N,M<=1000
其中有20%的数据,M=0
另有10%的数据,N<=M
对于100%的数据,1<=L<=1000000,0<=N,M<=100000 这个题因为是连续的,所以好写不少...就这我还没ac...最后被人提点了一下,发现最后端点还需要+1
#include<iostream> using namespace std; const int N=1e6+10; int a[N]; int main(){ long long int n,m,l,x,y,maxn=0; cin>>n>>l>>m; for(int i=1;i<=n;i++) { cin>>a[i]; } for(int i=1;i<=n;i++) { x=a[i+l]-a[i-1]-1; maxn=max(maxn,x); } y=m+1-a[n-l]-1; if(maxn<y) maxn=y; cout<<maxn<<endl; return 0; }
选择计算:
题目描述
输入三个整数x,y,z。根据z的值的不同对x和y进行计算:
z=1:输出x中的第y个素数,若x中不足y个素数,输出x中最大的素数。
z=2:输出x和y的最大公约数
z=3:输出x和y的最小公倍数
输入
只有一行,包括三个整数,x,y,z,其中2<=x,y<=100000,1<=z<=3,相邻的两个数之间用空格符隔开。输出
只有一个数,表示计算后的值样例输入 Copy
100 80 2
样例输出 Copy
20
这个没啥难度,就是longlong存就好了,但为什么n,m也需要longlong...这个不是没超吗。。。
#include<iostream> #include<cstring> using namespace std; typedef long long int ll; ll gcd(ll m,ll n) { if(m%n==0) return n; else return gcd(n,m%n); } ll gsy(ll m,ll n) { return m*n/gcd(m,n); } ll ss(ll n) { if(n<2) return 0; for(int i=2;i<=n/i;i++) if(n%i==0) return 0; return 1; } int main(){ ll x,y,z,t=0,flat; cin>>x>>y>>z; if(z==2) cout<<gcd(x,y)<<endl; else if(z==3) cout<<gsy(x,y)<<endl; else if(z==1) { for(int i=2;i<=x;i++) { if(ss(i)) { t++; flat=i; } if(t==y) { cout<<i<<endl; break; } } if(t<y) cout<<flat<<endl; } }