A.玉米大炮
题目大意:
小蓝正在玩一个植物大战僵尸的改版,在一个特别的关卡中,他需要用玉米大炮击溃僵王博士。
现在小蓝已经部署了 n 个玉米大炮,对于第 i 个玉米大炮,有一个伤害值 ai ,一个装填时间 bi ,玉米大炮每次发射后需要 bi 的装填时间,装填完毕之后才可以再次发射。
小蓝已经知道僵王博士有 m 点生命值,但他不知道他什么时间可以击溃僵王博士,你需要计算出出小蓝最少需要多少时间可以击溃僵王博士。
小蓝可以同时控制所有玉米大炮, 玉米大炮每次对僵王博士的攻击会扣除等于其伤害值的血量,如果血量低于或者等于 0 ,僵王博士被消灭,僵王博士被永久冻结不会攻击,开始时所有玉米大炮都装填完毕,装填完毕后小蓝会直接控制其立即攻击,攻击所花费的时间忽略不计。
思路:
二分答案,没想起来
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5+10;
ll n,m;
ll a[N],b[N];
bool check (ll mid)//代表时间mid时是否已经打死BOSS了
{
__int128_t S=0;//造成的总伤害
for(int i=1;i<=n;i++){
__int128_t t=(__int128_t)(mid/b[i]+1)*a[i];//伤害
S=S+t;
if(S>=m)return true;
}
return false;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i]>>b[i];
ll L=0,R=1e18;
while(L<R){
ll mid=(L+R)/2;
if(check(mid)) R=mid;
else L=mid+1;
}
cout<<L<<'\n';
}
B.
题目大意:
思路:
代码:
C.
题目大意:
思路:
代码:
D.
题目大意:
思路:
代码:
E.
题目大意:
思路:
代码:
F.
题目大意:
计算多少层电子
思路:
模拟题
代码:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int INF=0x3f3f3f3f;
const int N= 100000 + 10;
int a[8]={0,2,8,8,18,18,32,32};
int main(){
int t;
cin>>t;
while(t--){
int n,i;
cin>>n;
for(i=1;i<=8;i++){
n-=a[i];
if(n<=0){
break;
}
}
cout<<i<<endl;
}
return 0;
}
G.
题目大意:
思路:
代码:
H.
题目大意:
思路:
代码:
I.
题目大意:
思路:
代码:
J.神奇数字
题目大意:
小蓝有三个正整数 a, b , c,小蓝想找出所有正整数 x ,使得 ca≡b≡c (modx) 。
请从小到大输出所有 x 可能的取值,如果有无限种可能的 x ,则输出 −1 。
思路:
首先,当三个数一样时,输出-1
下面是判断三个数对一个数同余
代码:
#include <bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(false); cin.tie(0)
const int N=2e5+10,P=1e9+7;
int a,b,c;
vector<int> res;
void solve(){
res.clear();
cin >> a >> b >> c;
if(a==b&&b==c){
cout<<-1<<endl;
return ;
}
int x = __gcd(abs(a-b),abs(b-c));
for(int i=1; i<=x/i; i++){
if(x%i==0) {
res.push_back(i);
if(x/i!=i) res.push_back(x/i);
}
}
sort(res.begin(),res.end());
for(auto x:res) cout << x << ' ';
cout << endl;
}
signed main()
{
IOS;
int _ = 1;
cin >> _;
while(_--)
solve();
return 0;
}