zoukankan      html  css  js  c++  java
  • 【EOJ Monthly 2018.2 (Good bye 2017)】

    23333333333333333

    由于情人节要回家,所以就先只放代码了。 

    此题是与我胖虎过不去。

    【E. 出老千的 xjj】

    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int maxn=3000000;
    #define ll long long
    int i,j,n,k,x;
    ll p[maxn+10],sum[maxn+10],tmp,ans=100000000000000000,Max=0; 
    int main()
    {
        scanf("%d%d",&n,&k);
        for(i=1;i<=n;i++){
            scanf("%d",&x);
            tmp+=x;
            p[x]++;
        }
        if(tmp<=k){
            printf("0
    ");
            return 0;
        }
        for(i=1;i<=maxn;i++) {
           sum[i]=sum[i-1]+p[i]*i;
           p[i]+=p[i-1];
        }
        for(i=2;i<=maxn;i++){
            ll yy=(k-1)/i+1;
            ll xx=n;
            tmp=0;
            //if(k%i==0&&yy<xx) continue;  
            if(k%i==0) continue; //上面的WA了 
            for(j=0;j<maxn/i;j++){
                int n1=(j+1)*i,n2=j*i+1;
                if(n2<0) n2=0;
                xx+=(p[n1]-p[n2-1]);
                tmp+=(p[n1]-p[n2-1])*((j+1)*i)-sum[n1]+sum[n2-1];
                if(k%i==0&&yy<xx) break;
                if(tmp>ans) break;
            }
            if((k%i==0&&xx<=yy)||k%i!=0){
              ans=min(ans,tmp);
            }
        }
        cout<<ans<<endl;;
        return 0;
    }

    【A2】

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<ctime>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    #include<string>
    using namespace std;
    int n,k,p;
    int num[6]={100,50,20,10,5,1},cost[15];
    long long f[110];
    int main(){
        scanf("%d%d%d",&n,&k,&p);
        for(int i=1;i<=k;i++){
            long long temp=1LL*i*p;
            for(int j=0;j<=5;j++)
                if(temp>=num[j]){
                    cost[i]+=temp/num[j];
                    temp%=num[j];
                }
        }
        memset(f,10,sizeof(f));
        f[0]=0;
        for(int i=1;i<=100;i++)
            for(int j=max(0,i-k);j<i;j++)
                f[i]=min(f[i],f[j]+cost[i-j]);
        if(n<=100){
            cout<<f[n]<<endl;
            return 0;
        }
        int way=1;
        for(int i=2;i<=k;i++)
            if(1.0*i/cost[i]>1.0*way/cost[way])
                way=i;
        int t1=n/way,t2=n%way;
        long long ans=1LL*t1*cost[way]+f[t2];
        for(int i=1;i<=100;i++){
            t1=n/way-i;
            t2=n-way*t1;
            ans=min(ans,1LL*t1*cost[way]+f[t2]);
        }
        cout<<ans<<endl;
        return 0;
    }
    View Code

    【B】

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<ctime>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    #include<string>
    using namespace std;
    int N,sta[25];
    int f[1100000];
    struct edge{
        int x,y;
    }e[25];
    int have[25][25],cnt[25];
    int check(int x,int s){
        bool flag=0;
        for(int i=1;i<=cnt[x];i++)
            if(s&sta[have[x][i]]){
                flag=1;
                break;
            }
        if(!flag)
            return -1;
        for(int i=1;i<=cnt[x];i++)
            if(s&sta[have[x][i]])
                s^=sta[have[x][i]];
        return s;
    }
    int dfs(int s){
        if(f[s]!=-1)
            return f[s];
        for(int i=1;i<=N;i++){
            int temp=check(i,s);
                if(temp!=-1)
                    if(!dfs(temp))
                        return f[s]=1;
        }
        return f[s]=0;
    }
    int main(){
        sta[0]=1;
        for(int i=1;i<=20;i++)
            sta[i]=sta[i-1]*2;
        scanf("%d",&N);
        for(int i=0;i<N-1;i++){
            scanf("%d%d",&e[i].x,&e[i].y);
            have[e[i].x][++cnt[e[i].x]]=i;
            have[e[i].y][++cnt[e[i].y]]=i;
        }
        memset(f,-1,sizeof(f));
        f[0]=0;
        if(dfs(sta[N-1]-1))
            printf("First
    ");
        else
            printf("Second
    ");
        return 0;
    }
    View Code

    【F】

    #include<cstdio>
    #include<cstdlib>
    #include<iostream>
    using namespace std;
    const int maxn=10010;
    int main()
    {
        int T;
        double a,b,c,x,y,z;
        while(~scanf("%lf%lf%lf",&x,&y,&z)){
            a=(2.0*y-z+x)/2.0;
            b=x-a;
            c=(z-a-b)/2.0;
            if(a<=0||b<=0||c<=0) printf("Wrong
    ");
            else printf("%.6lf
    ",a);
        } return 0;
    }
    View Code
  • 相关阅读:
    ABA问题怎么解:AtomicStampedReference和AtomicMarkableReference
    原子类型累加器
    Spring Boot使用嵌入式容器,那怎么配置自定义Filter呢
    痞子衡嵌入式:语音处理工具pzh-speech诞生记
    痞子衡嵌入式:串口调试工具pzh-com诞生记(6)- 打包发布(PyInstaller3.3.1)
    痞子衡嵌入式:串口调试工具pzh-com诞生记(5)- 软件优化
    痞子衡嵌入式:串口调试工具pzh-com诞生记(4)- 联合调试(vspd, sscom, PyCharm2018.2)
    痞子衡嵌入式:串口调试工具pzh-com诞生记(3)- 串口功能实现(pySerial)
    痞子衡嵌入式:串口调试工具pzh-com诞生记(2)- 界面构建(wxFormBuilder3.8.0)
    痞子衡嵌入式:极易上手的可视化wxPython GUI构建工具(wxFormBuilder)
  • 原文地址:https://www.cnblogs.com/hua-dong/p/8447768.html
Copyright © 2011-2022 走看看