zoukankan      html  css  js  c++  java
  • Codeforces Round #280 (Div. 2)

    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
    ");
            }else if(a[s%(aa+b)]==1){
                printf("Vova
    ");
            }else printf("Both
    ");
        }
    }
    View Code

    e.有n*n的期盼每个位置的下个位置为(x+dx,y+dy),dx,dy与n互质给出m个点求从哪一点出发走的路径包含最多的点,又扩展欧几里得可知a*x+b*y所经历最小正值为gcd(a,b)

    由题意可知gcd(a,b) = 1;所以每个点都会走n个不同点(x和y均不重复)后回到原点,打表出任一点的路径情况,吗,每条路径都不会有重复的点并且平行所以(a[x]+n-y)相同的点必定在一条路径上

    #include<iostream>
    #include<string.h>
    #include<stdio.h>
    using namespace std;
    const int maxa = 1000005;
    int a[maxa];
    int b[maxa];
    int main(){
        int n, m, p, q;
        while(cin>>n>>m>>p>>q){
            int u= 0, v= 0;
            for(int i = 0; i < n; i++){
                a[u] = v;
                u = (u + p) % n;
                v = (v + q) % n;
            }
            int ansx, ansy;
            int maxn = 0;
            for(int i = 0 ; i < m;i++){
                int x, y;
                scanf("%d%d", &x, &y);
                b[(a[x]+n-y)%n] ++;
                if(b[(a[x]+n-y)%n] > maxn){
                    maxn = b[(a[x]+n-y)%n];
                    ansx = x;
                    ansy = y;
                }
            }
            printf("%d %d
    ", ansx, ansy);
        }
    }
    View Code
  • 相关阅读:
    ADB常用命令
    HttpClient4.x 使用cookie保持会话
    HttpClient发起Http/Https请求工具类
    MakeFile 文件的使用
    SQL连接查询和嵌套查询详解
    Linux中进程控制块PCB-------task_struct结构体结构
    Mysql数据库--语句整理/提升/进阶/高级使用技巧
    进程池分析
    mmap和shm共享内存的区别和联系
    IO多路复用模型之epoll实现机制
  • 原文地址:https://www.cnblogs.com/icodefive/p/4179532.html
Copyright © 2011-2022 走看看