A:枚举哪7个连续字串是abacaba即可,注意一些细节处理
#include
using namespace std;
typedef long long ll;
#define ls (o<<1)
#define rs (o<<1|1)
#define pb push_back
const double PI= acos(-1.0);
const int M = 1e5+7;
char s[110];
char t[10]="abacaba";
char p[110];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int T;
cin>>T;
while(T--)
{
int n;
memset(p,0,sizeof(p));
cin>>n>>p;
bool z=true;
for(int i=0;i+6
B:枚举a,然后b-c最多上下浮动 r-l,所以只需要找到m-n*a的最小绝对值,看b-c是否能凑成即可。
#include
using namespace std;
typedef long long ll;
#define ls (o<<1)
#define rs (o<<1|1)
#define pb push_back
const double PI= acos(-1.0);
const int M = 1e5+7;
/*
int head[M],cnt=1;
void init(){cnt=1,memset(head,0,sizeof(head));}
struct EDGE{int to,nxt,w;}ee[M*2];
void add(int x,int y,int w){ee[++cnt].nxt=head[x],ee[cnt].w=w,ee[cnt].to=y,head[x]=cnt;}
*/
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin>>t;
while(t--)
{
ll l,r,m;
cin>>l>>r>>m;
int a,b,c;
for(int i=l;i<=r;i++)
{
a=i;
int tp=a-m%a;
b=l,c=l+tp;
if(c<=r)
{
cout<=l)
{
cout<
C:显然,至多只有一种花买一朵以上。(因为买一朵以上时的收益为b[i],显然直接所有都用收益最高的那一种花即可)
然后枚举哪一种花买一朵以上然后处理下即可。
#include
using namespace std;
typedef long long ll;
#define ls (o<<1)
#define rs (o<<1|1)
#define pb push_back
const double PI= acos(-1.0);
const int M = 1e5+7;
/*
int head[M],cnt=1;
void init(){cnt=1,memset(head,0,sizeof(head));}
struct EDGE{int to,nxt,w;}ee[M*2];
void add(int x,int y,int w){ee[++cnt].nxt=head[x],ee[cnt].w=w,ee[cnt].to=y,head[x]=cnt;}
*/
struct node{
int a,b;
bool operator < (const node & r)const{
return a>t;
while(t--)
{
int n,m;
cin>>n>>m;
for(int i=1;i<=m;i++)cin>>p[i].a>>p[i].b;
sort(p+1,p+1+m);
for(int i=1;i<=m;i++)sm[i]=sm[i-1]+p[i].a;
sm[m+1]=sm[m];
ll mx=0;
for(int i=1;i<=m;i++)//m枚举哪一种花买至少一朵
{
int pos=lower_bound(p+1,p+1+m,node{p[i].b,0})-p;
int res=n-(m+1-pos);
ll tp=0;
if(p[i].a
D:
显然,客车占用时间段与某一量客车的发车时间重合最优。
枚举起始时间t,然后二分处理即可。
不过我写的比较麻烦。
更简单的做法:把时间%m/2,然后尺取即可。
#include
using namespace std;
typedef long long ll;
#define pb push_back
const int M = 1e5+7;
struct node{
int h,m,id;
bool operator <(const node & r)const{
// if(h==r.h)return m>n>>h>>m>>k;
for(int i=1;i<=n;i++)cin>>p[i].h>>p[i].m,p[i].id=i;
sort(p+1,p+1+n);
int mi=n+1,ans=0;//最少需要取消的货车数量 /t最终取值
for(int i=1;i<=n;i++)a[i]=p[i].m;
int tp,id,nm,l;
for(int i=1;i<=n;i++)
{
tp=p[i].m;
{
nm=0;
tp %= m/2;
id=upper_bound(a+1,a+1+n,tp-k)-a;
int r=lower_bound(a+1,a+1+n,tp)-a;
nm+=max(0,r-id);//(t-k,t)
if(tpm){
id=lower_bound(a+1,a+1+n,tp+m/2-m)-a;
nm+=max(id-1,0);
}
}
//cout<m){
id=lower_bound(a+1,a+1+n,tp+m/2-m)-a;
nm+=max(id-1,0);
}
}
if(nmv;
int t=ans;
for(int i=1;i<=n;i++)
{
int z=a[i],id=p[i].id;
bool f=false;
if(zt-k)f=true;
if(z>t-k+m)f=true;
if(z>t+m/2-k&&z