• 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem F. Finance 模拟题


    Problem F. Finance

    题目连接:

    http://codeforces.com/gym/100714

    Description

    The Big Boss Company (BBC) principal is going to prepare a vacation schedule for the next year. Each
    employee of BBC gets a four-week vacation each year. A vacation can be divided into several parts. Each
    part consists of several weeks. The parts are separated by at least one work week.
    According to the law, the pay for each vacation part is calculated separately from the others as follows.
    Consider the employee’s salary for the period of 52 weeks preceding the current part of the vacation and
    divide it by 52. (A year is assumed to consist of exactly 52 weeks.) All vacation pays during these 52
    weeks are ignored for the purpose of salary calculation. The result is multiplied by the number of weeks
    in this part of the vacation (ranging from 1 to 4).
    Given the vacation schedules for the current year, you should help the BBC principal to construct the
    next year’s schedule that minimizes the total vacation pay costs. Since the pays for distinct employees
    are unrelated you are to solve the problem assuming that there is only one employee.

    Input

    The input contains four integers listed in the ascending order giving the vacation weeks in the current
    year’s schedule. Weeks are specified by numbers ranging from 1 to 52.

    Output

    Output the numbers of vacation weeks for the next year in the ascending order. The vacation schedule
    should minimize the vacation pay costs. If there are several equivalent solutions, output any of them.

    Sample Input

    2 3 20 21

    Sample Output

    1 2 3 5

    Hint

    题意

    给你去年的假期安排,然后让你安排今年的假期,使得花费最少。

    假期的花费是这样的,如果前面52天有一个假期的话,那么这一天的花费--

    但是连着一起的话,就跟着算。

    (我语文不好。。 还是自己读题吧 TAT

    题解:

    52^4枚举,然后再check就好了,check我用的树状数组,仔细一想,好像直接O(56)枚举,然后判断就好了……

    代码

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn = 110;
    int ans,ans1,ans2,ans3,ans4;
    int ppp[maxn];
    int lowbit(int x){
        return x&(-x);
    }
    void update(int x,int v){
        for(int i=x;i<maxn;i+=lowbit(i))
            ppp[i]+=v;
    }
    int get(int x,int tmp=0){
        if(x==0)return 0;
        for(int i=x;i;i-=lowbit(i))
            tmp+=ppp[i];
        return tmp;
    }
    void cal(int x,int y,int z,int t){
        int px=x,py=y,pz=z,pt=t;
        if(y==x+1)y=x;
    
        if(z==x+2)z=x;
        if(z==y+1)z=y;
    
        if(t==x+3)t=x;
        if(t==y+2)t=y;
        if(t==z+1)t=z;
    
        update(px+52,1);
        update(py+52,1);
        update(pz+52,1);
        update(pt+52,1);
    
        int a1=get(x+51)-get(x-1);
        int a2=get(y+51)-get(y-1);
        int a3=get(z+51)-get(z-1);
        int a4=get(t+51)-get(t-1);
        int d[5];
        d[1]=0,d[2]=0,d[3]=0,d[4]=0;
        d[a1]++;
        d[a2]++;
        d[a3]++;
        d[a4]++;
        int sum = (52-a1)+(52-a2)+(52-a3)+(52-a4);
        if(sum<ans){
            ans=sum,ans1=px,ans2=py,ans3=pz,ans4=pt;
        }
        update(px+52,-1);
        update(py+52,-1);
        update(pz+52,-1);
        update(pt+52,-1);
    }
    int main(){
        //freopen("1.out","w",stdout);
        int a,b,c,dd;
        ans = 1e9;
        scanf("%d%d%d%d",&a,&b,&c,&dd);
        update(a,1);
        update(b,1);
        update(c,1);
        update(dd,1);
        cal(1,2,3,4);
    
        for(int i=1;i<=52;i++){
            for(int j=i+1;j<=52;j++){
                for(int k=j+1;k<=52;k++){
                    for(int t=k+1;t<=52;t++){
                        cal(i,j,k,t);
                    }
                }
            }
        }
    
        cout<<ans1<<" "<<ans2<<" "<<ans3<<" "<<ans4<<endl;
    }
  • 相关阅读:
    scripting.dictionary的彻底研究
    希望老人江诗信
    JavaScript正则表达式
    ASP日期和时间函数示例
    Asp网页制作技巧
    常见URL字符及URL编码值
    ASP.NET中如何调用存储过程
    【网摘】C#处理Json的另外一种方式 拓荒者
    使用Lucene.net进行全文查找多关键字匹配 拓荒者
    C#通用类型转换 Convert.ChangeType 拓荒者
  • 原文地址:https://www.cnblogs.com/qscqesze/p/5752148.html
Copyright © 2020-2023  润新知