A 走廊两边搬桌子

来源:互联网 发布:mac安装xampp 编辑:程序博客网 时间:2024/06/10 06:25


1.题目编号
2.简单题意
3.解题思路形成过程
4.感想

5AC代码



1.   1000  A

2.

题意:公司有400个房间,单号对双号对门,中间有一条走廊,现在要搬东西,给出要搬的次数,还有每次搬动的房间号,每次搬动需要10分钟,搬动过程中的那段走廊不能被使用,求最大搬动时长。


3.        建立结构体    里面是{ 开始房间   结束房间   被处理了么};

      1. 按照结束房间排序   

2.  选择    如果订单2的开始房间  大于 订单的1的结束房间     那么在这10min能共存。



4.     用模拟搬运的算法过了 

但是纯贪心的算法一直wa。。。样例过了而已   不知道是什么情况


5.     wa的代码:


#include <cstdio>
#include<iostream>
#include<stdio.h>
#include<vector>
#include<algorithm>
#include<numeric>
#include<math.h>
#include<string.h>
#include<map>
#include<set>
#include<vector>
#include <fstream>
using namespace std;
void chuli();
struct luxian
{
    int q;  //起
    int m;  //末
    int c;    //订单被处理了么


    };


bool cmp(const luxian &a,const luxian &b)
{
    if(a.m<b.m) return true;
    else if(a.m==b.m)return a.q<b.q;
    return false;
};






int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=3;i++)
    {


        chuli();   //处理
        }


}








void chuli()
{
    int g;
    cin>>g;
    luxian z;
    vector<luxian> v;


    for(int i=1;i<=g;i++)
    {
        cin>>z.q;
        cin>>z.m;
        z.c=0;


            if(z.q > z.m)
            swap(z.q, z.m);




        v.push_back(z);
             }


    sort(v.begin(),v.end(),cmp);   //按照末房间排列起来
 //   int a[10000];
 //   memset(a,0,sizeof(a));










    int time=0;
    int final;
    int sum=0;
    for(int i=0;i<g;i++)
    {
        if(v[i].c==1) continue;
        time += 10;
        v[i].c=1;   //起个头


        if(v[i].m %2==0)    final=v[i].m;
        else final=v[i].m+1;


        for(int j=i+1;j<g;j++)
        {
            if(v[j].q>final)   v[j].c=1;


        if(v[j].m %2==0)    final=v[j].m;
        else final=v[j].m+1;




            }






//test 满了么
        for(int i=1;i<g;i++)
        {
            if(v[i].c==0) break;
            else sum++;


            if(sum==g) goto shuchu;
        }






        }




    shuchu:cout<<time<<endl;






    }

0 0
原创粉丝点击