zoukankan      html  css  js  c++  java
  • Codeforces Round #460 (Div. 2) 前三题

    Problem A:题目传送门

    题目大意:给你N家店,每家店有不同的价格卖苹果,ai元bi斤,那么这家的苹果就是ai/bi元一斤,你要买M斤,问最少花多少元。

    题解:贪心,找最小的ai/bi。

    #include <cstdio>
    using namespace std;
    double minn=2e9,x,y,M;
    int N;
    
    int read()
    {
        char c;while(c=getchar(),c<'0'||c>'9');
        int x=c-'0';while(c=getchar(),c>='0'&&c<='9')x=x*10+c-'0';
        return x; 
    } 
    
    inline double min(double x,double y){return x<y?x:y;}
    
    int main()
    {
        N=read(),M=read();
            for(int i=1;i<=N;i++){
                x=read(),y=read();
                minn=min(minn,M*x/y); 
            }
        printf("%.8lf",minn);
        return 0;
    } 
    Problem A

    Problem B:题目传送门

    题目大意:给一个数字K,求一个第K大的Perfect数,Perfect数指这个数数位上的数字之和为10。

    题解:DFS即可。

    #include <cstdio>
    #include <cstdlib>
    using namespace std;
    
    int K,cnt=0,a[11];
    
    void print(int tot)
    {
        for(int i=1;i<=tot;i++)putchar(a[i]+'0');
        return ;
    }
    
    void search(int tot,int now,int less)
    {
        if(now==tot){
            cnt++;
            if(cnt==K){print(tot);exit(0);}
            return ;
        }
        if(now==tot-1){a[tot]=less;search(tot,tot,0);return ;}
            for(int i=0;i<=less;i++){
                a[now+1]=i;
                search(tot,now+1,less-i);
            }
        return ;
    }
    
    int main()
    {
        scanf("%d",&K);
        register int i,j;
            for(i=2;i<=10;i++){
                for(j=1;j<=9;j++){
                    a[1]=j;
                    search(i,1,10-j);
                }
            }
        return 0;
    }
    Problem B

    Problem C:题目传送门

    题目大意:给三个整数N,M,K,表示图的大小为N*M,求能坐的座位有连续K个的方案数。‘*’表示不能坐,“.”表示能坐。

    题解:预处理每个点横着有连续几个,竖着有连续几个,然后找到一段连续的最大的点ans+=min(0,W-K+1)。W为这个点的值。K为一时特判,答案为所有能坐的位置总和。

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    
    int N,M,K,ans,cnt;
    int a[2005][2005];
    int ri[2005][2005],di[2005][2005];
    
    int main()
    {
        scanf("%d%d%d",&N,&M,&K);
        register int i,j;
            for(i=1;i<=N;i++){getchar();
                for(j=1;j<=M;j++){
                    char c=getchar();
                    if(c=='.')a[i][j]=1,cnt++;
                }
            }
        if(K==1)return printf("%d",cnt),0;
            for(i=1;i<=N;i++)
                for(j=1;j<=M;j++)
                    if(a[i][j])ri[i][j]=ri[i][j-1]+1,di[i][j]=di[i-1][j]+1;
            for(i=1;i<=N;i++)
                for(j=1;j<=M+1;j++){
                    if(!a[i][j])ans+=(max(0,ri[i][j-1]-K+1));
                }
            for(j=1;j<=M;j++)
                for(i=1;i<=N+1;i++){
                    if(!a[i][j])ans+=(max(0,di[i-1][j]-K+1));
                }
        printf("%d",ans);
        return 0;
    }
    Problem C
  • 相关阅读:
    BZOJ2648: SJY摆棋子
    BZOJ1925: [Sdoi2010]地精部落
    BZOJ1941: [Sdoi2010]Hide and Seek
    BZOJ2434: [Noi2011]阿狸的打字机
    BZOJ3295: [Cqoi2011]动态逆序对
    BZOJ1406: [AHOI2007]密码箱
    BZOJ1115: [POI2009]石子游戏Kam
    BZOJ1531: [POI2005]Bank notes
    BZOJ2730: [HNOI2012]矿场搭建
    计算几何《简单》入土芝士
  • 原文地址:https://www.cnblogs.com/Cptraser/p/8414125.html
Copyright © 2011-2022 走看看