A - Divisible
水题,直接排序,判断整除即可
void solve(){
CIN(n);CIN(d);
vector<int> a(n);
FOR(i,0,n-1){
cin>>a[i];
}
sort(a.begin(),a.end());
FOR(i,0,n-1){
if(a[i]%d==0)cout<<a[i]/d<<" ";
}
}
B - Substring
数据量好小,跑遍暴力收集即可
void solve(){
set<string> se;
SCIN(s);s=" "+s;
FOR(i,1,s.length()-1)FOR(j,i,s.length()-1){
se.insert(s.substr(i,j-i+1));
}
cout<<se.size();
}
C - Ideal Holidays
先把日期全取模收到一周内,然后反向思考,如果找到了相邻的两天,间距大于weekday长度,那么就输出yes,不然就不可能满足题意。注意头和尾也要求一次间距。
void solve(){
CIN(n);CIN(a);CIN(b);
vector<bool> d(a+b);
FOR(i,1,n){
CIN(tmp);
tmp%=(a+b);
d[tmp]=1;
}
bool ck=0;
vector<int> c;
FOR(i,0,a+b-1)if(d[i])c.push_back(i);
FOR(i,1,c.size()-1)if(c[i]-c[i-1]>b)ck=1;
if(c[0]+a+b-c[c.size()-1]>b)ck=1;
cout<<ANS[ck];
}
附录
这里贴上用到的头部和main函数:
#include<iostream>
#include<vector>
#include<cmath>
#include<bits/stdc++.h>
#define ll long long
#define ld long double
using namespace std;
#define ET '\n'
#define FOR(i,a,b) for(int i=(a);i<=(b);i++)
#define rFOR(i,a,b) for(int i=(a);i>=(b);i--)
//双向for循环
#define rep(i,a,b) for(int i=(a);i!=(b)+2*(a<b)-1;i+=2*(a<b)-1)
#define CIN(a) ll a;cin>>a
#define DCIN(a) ld a;cin>>a
#define SCIN(a) string a;cin>>a
#define CA cout<<ans<<ET
#define CY cout<<"YES"<<ET
#define CN cout<<"NO"<<ET
#define max(a,b) ((a>b)?(a):(b))
#define min(a,b) ((a<b)?(a):(b))
//没有C++20就不能用ranges了
//#define PP(l,r,CK) *ranges::partition_point(ranges::iota_view((l),(r)+1),(CK))
//string ANS[2]={"No\n","Yes\n"};
int M=1e9+7;
inline ll MO(ll x){return (x%M+M)%M;}
void solve(){
}
int main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
//pre();
CIN(t);while(t--)
solve();
return 0;
}