CJ的任务

Time Limit:1000ms    Memery Limit:32768K

Accepted/Submit(Users):  2/5(40.0%)

Description

CJ无所事事一段时间后,突然接到了Boss的任务。这次Boss一次性给他安排了n个任务(1<=n<100000),要求在m天内完成(m<1000000)。CJ这下得忙坏了,接到任务的第1天他就开始工作了!CJ知道每个任务的最迟开始时间为第d天,价值为v(d,v为整数,d<1000000, v<100),每个任务都可以都需要1天才能完成。现在CJ困惑了,怎样才能使价值最大,他找到了学计算机的你。

Input

包含多组数据。 每组数据第一行为n,m; 接下来n行为d,v。

Output

输出任务所有任务价值和的最大值。

Sample Input

4 2 2 1 2 2 4 3 1 4

Sample Output

7

。。。首先条件反射觉得是DP。。。

结果一看数据,就无语了。。。

原来是贪心啊贪心。。。

先对所有的任务的价值进行排序(从大到小)

然后从按序从每个任务的最大限定时间开始,找到有空余的天,如果有,将价值加入总值sum并将该时间进行标记。。

如果一直找到天为0,则说明此任务不能完成;

这里主要的优化(否则会超时)是:已经找过了的天,就不需要再找一遍,直接用fa[]数组记下来。。。

那么下一次,就会跳过已经找过的,确定没有空闲的天;

贪心啊贪心。。。现在发现好像在数据量非常大的题目里,不是贪心,就是二分。。。

代码:

View Code

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<string.h>
 4 #include<algorithm>
 5 using namespace std;
 6 int flag[1000005];
 7 struct node{
 8        int a;
 9        int v;
10 };
11 node p[1000005];
12 int fa[1000005];
13 bool cmp(const node & b,const node & c){
14      return b.v>c.v;
15 }
16 int sea(int start){
17     if(start==0)
18            return -1;
19     if(flag[start]==0){
20           return start;
21           }
22  //   cout<<start<<endl;
23     int tem=fa[start];
24     fa[start]=fa[fa[start]];
25     return sea(tem);
26 }
27 int main(){
28     int n,m;
29     while(scanf("%d%d",&n,&m)!=EOF){
30         memset(flag,0,sizeof(flag));
31       //  memset(flag2,0,sizeof(flag2));
32         int sum=0;
33         for(int i=0;i<n;i++){
34                 scanf("%d%d",&p[i].a,&p[i].v);
35            //     flag[i]=0;
36             //    flag2[i]=0;
37            //     fa[i+1]=i;
38          }
39          for(int k=0;k<=1000000;k++){
40                  fa[k+1]=k;
41                  }
42         sort(p,p+n,cmp);
43         for(int j=0;j<n;j++){
44                 int temp;
45                 if(p[j].a>m){
46                           temp=sea(m);
47                           }
48                 else{
49                           temp=sea(p[j].a);
50                    //       cout<<p[j].a<<" "<<temp<<endl;
51                           }
52                 if(temp!=-1){
53                           sum+=p[j].v;
54                           flag[temp]=1;
55                     //      fa[p[j].a]=temp;
56                           }
57         //        else{
58           //                flag2[temp]=1;
59             //              }
60                           }
61         printf("%d\n",sum);
62     //    cout<<sum<<endl;
63         }
64     return 0;
65 }

榜单

Time Limit:1000ms    Memery Limit:32768K

Accepted/Submit(Users):  1/2(50.0%)

Description

ZZY很喜欢流行音乐,每周都要跟踪世界各地各种榜单,例如Oricon和Billboard,现在给出每周各个单曲的销量请给出每周的TOP5以及TOP5中各个单曲的浮动情况。 量的排名是按照本周销量排名,而不是总销量。 浮动情况则是较上周的排名变动,也就是说即使某单曲本周销量比上周的差,但排名比上周高,也是*UP*。反之若排名比上周低则为*DOWN*。若与上周的名次一样,则是*STAY*。 若是本周发行的新单(前面未有统计过销量),则浮动的情况为*NEW*。所以第一周所有单的情况都为*NEW*。

Input

多周数据,每周第一行输入为一个正整数N(5<=N<=10)表示当周统计了销量的专辑数,当N=0时结束输入。(不超过10周) 每周的单曲名字都是不超过30位的字符串(不会有空格,连续的串),名字后面跟的就是销量,单周最大销量不超过200万张。并且在不同周,相同的专辑名字一定是一模一样(相同的字符串)。 每周不会出现两个单曲销量相同。 本周没有统计前面某个已存在单曲的销量则说明本周其销量小得可以忽略,为0。

Output

第一组数据为第一周,第二组数据为第二周,以此类推。 每周数据第一行为WEEK k其中k为周数,WEEK k的左右两边各16个'-'。 紧接着五行,依次为top1~top5。 先输出当前是第几名"rank.",再接着当前名次单曲较上周的浮动情况。 *DOWN*与*STAY*后面空两格格输出单曲名,*NEW*后面空三格输出单曲名,*UP*后面空四格输出单曲名。 每行输出完单曲名后不要输出多余空格。 具体输出格式细节参考样例。

Sample Input

6 AKB48-Give_me_Five 1200000 Adele-Set_Fire_To_The_Rain 900000 Katy_Perry-Part_Of_Me 400000 KANA-Sakura,I_love_you 360000 Nicki_Minaj-Starships 300000 AAA-SAILING 350000 5 KAT_TUN-CHAIN 550000 Adele-Set_Fire_To_The_Rain 850000 AKB48-Give_me_Five 500000 KANA-Sakura,I_love_you 300000 Nicki_Minaj-Starships 290000 0

Sample Output

----------------WEEK 1---------------- 1.*NEW* AKB48-Give_me_Five 2.*NEW* Adele-Set_Fire_To_The_Rain 3.*NEW* Katy_Perry-Part_Of_Me 4.*NEW* KANA-Sakura,I_love_you 5.*NEW* AAA-SAILING ----------------WEEK 2---------------- 1.*UP* Adele-Set_Fire_To_The_Rain 2.*NEW* KAT_TUN-CHAIN 3.*DOWN* AKB48-Give_me_Five 4.*STAY* KANA-Sakura,I_love_you 5.*UP* Nicki_Minaj-Starships

Source

ZZY@USC

这就是一道很简单的模拟题;不过因为题意一开始没弄清,有一个地方搞错啦,所以后来改晕了。。

幸好和汪老大讨论了一下,真实一语点醒梦中人啊。。。

再一改就AC了。。。

结论:做题之前审题是非常重要的~尤其是模拟题。。。如果改得太晕,不如和队友讨论讨论,肯定比自己一个人苦想强。。。

代码:

View Code

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<string.h>
 4 #include<algorithm>
 5 #include<map>
 6 using namespace std;
 7 struct node{
 8        char name[100];
 9        int num;
10        int flag;
11 };
12 node a[100];
13 node b[100];
14 bool cmp(const node & c,const node & d){
15      return c.num>d.num;
16 }
17 int main(){
18     int n;
19     int times=0;
20     char top[100][20];
21     int m=0;
22     map<string,int> mapp;
23     while(cin>>n){
24         memset(a,0,sizeof(a));
25         if(n==0)
26           break;
27         m++;
28         for(int i=0;i<n;i++){
29                 scanf("%s%d",a[i].name,&a[i].num);
30               //  mapp[a[i].name]=1;
31                 }
32         sort(a,a+n,cmp);
33         for(int j=0;j<5;j++){
34                 int k;
35                 for(k=0;k<times;k++){
36                         if(strcmp(a[j].name,b[k].name)==0){
37                                     if(j<b[k].num){
38                                             strcpy(top[j],"*UP*    ");
39                                         //    top[j]="*UP*    ";
40                                             }
41                                     else if(j==b[k].num){
42                                            strcpy(top[j],"*STAY*  ");
43                                          //   top[j]="*STAY*  ";
44                                             }
45                                     else if(j>b[k].num){
46                                            strcpy(top[j],"*DOWN*  ");
47                                            // top[j]="*DOWN*  ";
48                                             }
49                                     break;
50                                             }
51                                             }
52                if(k>=times){
53                     if(mapp[a[j].name]==1){
54                           strcpy(top[j],"*UP*    ");
55                           }
56                     else
57                      strcpy(top[j],"*NEW*   ");
58                   //   top[j]="*NEW*   ";
59                      }
60                      }
61         cout<<"----------------WEEK "<<m<<"----------------"<<endl;
62         for(int g=0;g<=4;g++){
63                 printf("%d.%s%s\n",(g+1),top[g],a[g].name);
64                 }
65         for(int i=0;i<n;i++){
66                    mapp[a[i].name]=1;
67                    b[i].num=i;
68                    strcpy(b[i].name,a[i].name);
69                  }
70  //       sort(b,b+times,cmp);
71         times=n;
72         }
73        return 0;
74 }
75                 

training@USC 12 2相关推荐

  1. 深度学习(12):SemanticKITTI论文翻译与学习

    SemanticKITTI论文是发表在CVPR 2019上的一篇在KITTI Vision Odometry Benchmark数据集上制作语义分割数据集SemanticKITTI的文章,为基于车载激 ...

  2. 如何快速优化机器学习的模型参数

    作者 | Thomas Ciha 译者 | 刘旭坤 编辑 | Jane 出品 | AI科技大本营 [导读]一般来说机器学习模型的优化没什么捷径可循.用什么架构,选择什么优化算法和参数既取决于我们对数据 ...

  3. 独家 | 使用Python实现机器学习特征选择的4种方法(附代码)

    作者:Sugandha Lahoti 翻译:李洁 校对:杨光 本文约3500字,建议阅读13分钟. 本文中,我们将研究从数据集中选择特征的不同方法;同时通过使用Python中Scikit-learn  ...

  4. TensorFlow for Hackers - Part III

    Have you ever stood still, contemplating about how cool would it be to build a model that can distin ...

  5. 【theano-windows】学习笔记十五——受限玻尔兹曼机

    前言 终于到了最喜欢的模型: 受限玻尔兹曼机(RBM)了, 发现关于RBM是如何从能量模型发展过来的介绍非常不错, 而关于详细理论证明, 可以去看我前面的受限玻尔兹曼机的一系列博客. 国际惯例, 参考 ...

  6. 【theano-windows】学习笔记十三——去噪自编码器

    前言 上一章节学习了卷积的写法,主要注意的是其实现在theano.tensor.nnet和theano.sandbox.cuda.dnn中都有对应函数实现, 这一节就进入到无监督或者称为半监督的网络构 ...

  7. 项目实战-使用PySpark处理文本多分类问题

    原文链接:https://cloud.tencent.com/developer/article/1096712 在大神创作的基础上,学习了一些新知识,并加以注释. TARGET:将旧金山犯罪记录(S ...

  8. 机器学习工程师 - Udacity 强化学习 Part Nine

    深度Q学习 TensorFlow实现 如果你想了解如何在其他 Python 框架中编写实现,请参阅: (Keras) https://keon.io/deep-q-learning/ (PyTorch ...

  9. GitHub 标星 2.3k+,比个手势,AI 自动识别 Emoji!

    关注 "GitHubDaily" 设为 "星标",每天带你逛 GitHub! 转自量子位,作者圆栗子 一只手势识别 AI,怎样才算得上 (优) 秀啊? 不停地变 ...

最新文章

  1. java列表包含列表_java – 包含另一个列表的列表
  2. mysql元数据死锁日志_这个未修复的MySQL 5.7死锁Bug,你知道么?
  3. 英语语法---副词详解
  4. Windows下安装苹果iPhone开发环境xcode图文教程
  5. android keystore作用,如何使用Android KeyStore安全地存储任意字符串?
  6. 部署Docker前必须问自己的四个问题
  7. Halcon图像预处理与形态学(图像的几何变换)
  8. 《jQuery、jQuery UI及jQuery Mobile技巧与示例》——3.5 技巧:更改元素的HTML内容...
  9. 《关于促进大数据发展的行动纲要》提出三大指导意见
  10. 用EasyChm制作chm文档
  11. 杭电多校第八场05_Separated Number(组合数前缀和性质)
  12. 基于C#的AE二次开发之GP工具的使用心得
  13. 跟铁拐李李老师学习工作流的第二天
  14. 2021年中式面点师(中级)最新解析及中式面点师(中级)模拟考试题库
  15. PySpark | SparkSQL入门 | DataFrame入门
  16. 【CodeForces】Educational Codeforces Round 118 (Rated for Div. 2)【A-C】
  17. 怎么在php中加入换行符,如何在PHP中创建换行符?
  18. Objective-C基础教程读书笔记
  19. 直播平台必备-百度音视频直播 LSS
  20. vue ios微信小程序跳转外链地址,返回页面执行自动后退或关闭页面

热门文章

  1. 全国计算机等级考试一级大纲,全国计算机等级考试大纲(一级WIN)
  2. 唯样商城:电路板上的字母都代表什么意思?
  3. $STRM 空投和 Strategy Stakers 代币分配
  4. unraid下使用iyuu辅种
  5. Time Freeze 时间冻结 影子系统
  6. python 分类变量转为哑变量_Python中的虚拟变量(dummyvariables)
  7. 在UE4中改变枢轴位置
  8. 苏黎世联邦理工学院计算机怎么样,哪位大神知道苏黎世联邦理工学院怎么样?...
  9. vue+openlayer实现选房平面图
  10. 如何批量替换文件名称中的指定字符?