a.水
b.n长度的街道有m个路灯,给出每个路灯的位置,求灯光能覆盖所有地方的最小灯光半径,水;
c.小明有n们课程要达到一个规定的总分数,一直目前每科达到的分数和每科的总分,买每门课程分数所需费用给出,问最少得花多少钱;贪心,水;
d.两个人刷怪,问谁能给出最后一击,给出怪物的血量,小明每1/m秒出击一次,小红1/n秒出击一次;
由于m,n<=1000000怪物血量<=1000000000
先打表一秒内两人对m+n以内的血的出击情况,暴力就行,但用double存会wa所以用分数存
能知道每秒两人造成的伤害为m+n,那么用a[怪物血量%(m+n)]就是答案
#include<iostream> #include<stdio.h> #include<string.h> using namespace std; const long long maxa = 2000005; long long a[maxa]; long long ss(long long suma, long long a, long long sumb, long long b){ if(suma * b > sumb * a){ return 1; }else if(suma * b < sumb * a){ return 0; }else return 2; } int main(){ long long n, aa, b; cin>>n>>aa>>b; long long sumx = 0, sumy = 0; for(long long i = 1; i <= aa+b; i++){ long long u = ss(sumx+1,aa,sumy+1,b); //printf("%d ", u); if(u == 0){ sumx ++; a[i] = 0; }else if(u == 1){ sumy ++; a[i] = 1; }else{ sumx ++;sumy ++; a[i++] = 2; a[i] = 2; } } a[0] = a[aa+b]; while(n--){ long long s; cin>>s; if(a[s%(aa+b)] == 0){ printf("Vanya\n"); }else if(a[s%(aa+b)]==1){ printf("Vova\n"); }else printf("Both\n"); } }