zoukankan      html  css  js  c++  java
  • Codeforces#441 Div.2 四*题

    Codeforces#441 Div.2 四*题   

    链接

    A. Trip For Meal

    ****喜欢吃蜂蜜。他每天要在朋友家享用N次蜂蜜 , 朋友A到B家的距离是 a ,A到C家的距离是b ,B到C家的距离是c  (A- >Rabbit   B- >Owl    C ->Eeyore),他不能连续两顿饭都在同一位朋友家里蹭

    他现在位于A的家里, 请问他一天最少要跑多少路。

    当然是要找一条最短的路折返跑了啊,是不是很简单。

    #include<bits/stdc++.h>
    using namespace std;
    int N,a,b,c;
    int main()
    {
        cin>>N>>a>>b>>c;
        if        (N==1)printf("0
    ");
        else if    (N==2)printf("%d
    ",min(a,b));
        else if (N>=3){
            int k=min(a,b);
            if(k<=c)
                printf("%d
    ",(N-1)*k);
            else     printf("%d
    ",k+(N-2)*c);
        }
        return 0;
    }
    A

    B. Divisiblity of Differences

    给你一个有N个元素的可重集合,你需要找出一个含k个元素的子集,使里面的数两两的差都能被m整除

    差 + 整除 -> 同余 -> 子集中的数对m同余

    每个数都mod m 然后枚举余数就好了。

    #include<bits/stdc++.h>
    using namespace std;
    int N,M,K,a[100005],vis[100005],ans=-1;
    int main()
    {
        scanf("%d%d%d",&N,&K,&M);
        for(int i=1;i<=N;i++){
            scanf("%d",&a[i]);
            vis[a[i]%M]++;
        }
        for(int i=0;i<M;i++){
            if(vis[i]>=K){
                ans=i;
                break;
            }
        }
        if(ans!=-1){
            printf("Yes
    "); 
            for(int i=1;i<=N&&K;i++)
                if(a[i]%M==ans)printf("%d ",a[i]),K--;
            printf("
    ");
        }
        else printf("No
    ");
    } 
    B

    C. Classroom Watch

    先定义一个f(x) , f(x)的值就是  x的每一位加在一起 在加上它本身  f(123)=1+2+3+123=129

    给你一个int范围内的整数N,求满足f(x)=N 的x有多少  和这些x的值

    最多就十位数 各数位的数加在一起也超不过100  于是就 枚举 N-100~N 的所有数

    #include<bits/stdc++.h>
    using namespace std;
    int N,ans[128],cnt;
    void judge(int x)
    {
        int sum=x,i=x;
        while(i){
            sum+=i%10;
            i=i/10;
        }
        if(sum==N)ans[++cnt]=x;
    }
    int main()
    {
        scanf("%d",&N);
        for(int i=N-100>=0?N-100:0;i<=N;i++){
            judge(i);
        }
        printf("%d
    ",cnt);
        for(int i=1;i<=cnt;i++)
            printf("%d
    ",ans[i]);
        return 0;
    }
    C

    D. Sorting the Coins

    每次就是寻找最后一个O前面有多少x  ,很容易 ,看到有人拿树状数组什么的其实没必要 ,这个尤其好*护,而且很水

    #include<bits/stdc++.h>
    using namespace std;
    int N,a[300005],vis[300005],ans;
    int main()
    {    
        scanf("%d",&N);
        printf("1 ");
        int zer=N;
        for(int i=1;i<=N;i++){
            scanf("%d",&a[i]);
            vis[a[i]]=1;
            if(a[i]>zer){
                printf("%d ",ans+1);
            }
            else{
                ans++;
                while(vis[zer])ans--,zer--;
                printf("%d ",ans+1);
            }
        }
        return 0;
    }
    D
  • 相关阅读:
    去掉FALSH背景的代码
    问一个比较傻瓜的问题关于 this.TextBox1.Visible = true;
    网页防止复制 下载 另存为的JS
    [转] left join/right join/inner join操作演示
    VS2003新起项目步骤
    我专严新闻小偷之心得与大家交流
    ACCESS数据库里SQL语句的3个表联合,和SQL有很大差别
    vs2005常用快捷键
    NoSql中的CAP分类【转载】
    epoll用法【整理】
  • 原文地址:https://www.cnblogs.com/Elfish/p/7694886.html
Copyright © 2011-2022 走看看