A. Setting up Camp
a,必须要一个人住。
b,必须要三个人住。
c,无所谓(1~3人)
问最少要几个帐篷。
a一定要一个人住,所以最少a个帐篷。
b要三个人住,如果b不是三的倍数,就从c那边拿人过来,帐篷再加b/3
如果c是负数,则无法完成分配,输出负一。
不是负数就把c全部安排三人间,有余数再加1。
#include <bits/stdc++.h>
#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define debug(a) cout<<#a<<"="<<a<<endl
#define all(x) x.begin(),x.end()
#define EX exit(0)
#define fr first
#define se second
#define endl '\n'
using namespace std;
using ll=long long;
void solve(){
int a,b,c;
cin>>a>>b>>c;
int ans=a;
while(b%3!=0){
b++;
c--;
}
if(c<0){
cout<<-1<<endl;
}else{
ans+=b/3;
ans+=c/3;
if(c%3)ans++;
cout<<ans<<endl;
}
}
signed main(){
ios::sync_with_stdio(false),cin.tie(nullptr);
int t=1;
cin>>t;
while(t--)solve();
return 0;
}
B. Fireworks
a烟花启动之后,每隔a分钟都会发射一次,持续m时间,即 [a,a+m],都有烟花。
b烟花启动之后,每隔b分钟都会发射一次,持续m时间,即 [b,b+m],都有烟花。
a,b烟花同时发射,同一时间最多看到几个烟花。
因为是同时发射的,所以定死了区间是 [1,m],只需要考虑 m 里面 a 和 b 能发射几次即可。
#include <bits/stdc++.h>
#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define debug(a) cout<<#a<<"="<<a<<endl
#define all(x) x.begin(),x.end()
#define EX exit(0)
#define fr first
#define se second
#define endl '\n'
using namespace std;
using ll=long long;
void solve(){
int a,b,m;
cin>>a>>