A.How Much Does Daytona Cost?
因为是求出一个K出现次数最大的不为空集的集合,所以只需要在全部序列中包含K即可,因为K可以作为一个子串出现,而这个子串只含K,所以K出现次数最多,该策略可行
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int M=110;
int t,n,k;
int a[M];
void solve()
{
cin>>n>>k;
bool flag=0;
for(int i=1;i<=n;i++){
int x;cin>>x;
if(x==k)flag=1;
}
if(flag)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
signed main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>t;
while(t--)solve();
}
B.Aleksa and Stack
题目要求我们构造一个大小为 n 的正整数严格递增数组,使得
3⋅a_{i+2}不能被a_i+a_{i+1}整除,每个i都不能被a_{i}+a_{i+1}整除。(1≤i≤n−2).
请注意,大小为 n的严格递增数组 a是一个对每个i都有 a_{i}<a_{i+1}的数组。
那么我们可以想到一个策略,输出所有的奇数:
两奇数相加是偶数,两奇数相乘是奇数,偶数一定不能整除奇数
代码很简单,就不放出来了
C.Vasilije in Cacak
题意:
给出三个数n、k 和 x,判断能否在 1 和 n之间选择 k个不同的整数,使它们的和等于 x
相关知识:
在n到m中任选数字,能否取任意数,使其和为K----此时只需要k>=n,并且k<=从n加到m的和;
那么这题我们的思路就很清晰了:
x应该大于从1加到k的和,x应小于从最大值n加k的和
代码实现也很简单
#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<string>
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
//int a[N];
int n,k,a,b;
typedef int rr;
priority_queue<rr,vector<rr>,greater<rr> > q;
void solve(){
int a,b,c;
cin>>a>>b>>c;
if(c>=(1+b)*b/2&&c<=(2*a-b+1)*b/2)
cout<<"YES\n";
else cout<<"NO\n";
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t=1;
cin>>t;
while(t--){
solve();
}
}
蒟蒻也就做到这了,补题去力