问题 A: 灯光控制

时间限制: 1 Sec  内存限制: 128 MB
提交: 53  解决: 40
[提交][状态][讨论版][Edit] [TestData]

题目描述

灯光师小明控制着各种晚会的各种大小灯,每次晚会小明都会对灯进行很多次操作。对每盏灯只能进行两种操作,开和关。现在小明希望自己随时都知道还有多少盏灯亮着。你需要编写一个程序当小明问你时你能快速的说出还有多少盏灯亮着。 注意晚会开始时所有的灯都是灭的。

输入

只有一组数据.第一行输入两个正整数N,T(0<N<=100000,0<T<=1000000)N表示有N盏灯,T表示有T条指令。随后T行每行有一条指令,这条指令包含一个字符串,当字符串为CHANGE,它后面还有一个整数m,表示对第m盏灯进行一次操作(操作表示如果第m盏灯灯是开着时就关闭,如果灯是关着时就打开)。当字符串为QUERY,表示小明想查询现在还有多少盏灯亮着。

输出

每次查询指令输出占一行,输出当前亮着灯的个数

样例输入

10 8
CHANGE 1
QUERY
CHANGE 2
QUERY
CHANGE 1
CHANGE 9
CHANGE 7
QUERY

样例输出

1
2
3

提示

显然灯的序号是从1开始的。

#include<stdio.h>
int main()
{int n, t, m, count = 0, a[100005] = {0};char s[20];scanf("%d%d", &n, &t);for(int i = 0; i < t; i++) {scanf("%s", s);if(s[0] == 'C'){scanf("%d", &m);a[m] = !a[m];if(a[m]) count++;else count--;}if(s[0] == 'Q')printf("%d\n", count);}
}

1781: 彩灯统计

时间限制: 1 Sec  内存限制: 128 MB
提交: 43  解决: 21
[提交][状态][讨论版][Edit] [TestData]

题目描述

儿童乐园有各种颜色的彩灯,小明想要知道哪种颜色的灯数量最多。但是由于数据过于庞大,小明也束手无策,所以他想请聪明如你的ACMer来帮忙。

输入

第一行输入彩灯的数量N(1<= N <= 1000),接下来的N行输入N个字符串表示彩灯的颜色(字符串的长度不超过10,字符串全为小写字母,并且只有一组测试数据)。保证彩灯颜色不超过1000种。

输出

输出这些彩灯中最多的颜色的名字与数量,并用空格隔开(数据保证最多的颜色只有一个)。

样例输入

12
red
green
blue
white
red
green
blue
white
red
green
blue
red

样例输出

red 4
#include<stdio.h>
#include<string.h>
int main()
{int n;char a[1010][10];int b[1010]={0};char c[10];scanf("%d",&n);int m=1,i;int d=n;scanf("%s",a[0]);n--;b[0]++;while(n--){scanf("%s",c);for(i=0;i<m;i++){if(!strcmp(c,a[i])){b[i]++;break;}}if(i==m){strcpy(a[i],c);b[i]++;m++;}}int max=0;for(i=1;i<d;i++){if(b[max]<b[i])max=i;}printf("%s %d\n",a[max],b[max]);return 0;
}

1776: 背包问题X

时间限制: 3 Sec  内存限制: 128 MB
提交: 143  解决: 36
[提交][状态][讨论版][Edit] [TestData]

题目描述

现在有很多物品(它们是可以分割的),我们知道它们每个物品的总价值v和重量w(1<=v,w<=100;如果给你一个背包它能容纳的重量为m(10<=m<=100),你所要做的就是把物品装到背包里,使背包里的物品的价值总和最大。

输入

第一行输入一个正整数n(1<=n<=5),表示有n组测试数据;
随后有n测试数据,每组测试数据的第一行有两个正整数s,m(1<=s<=10);s表示有s个物品。接下来的s行每行有两个正整数v,w。

输出

输出每组测试数据中背包内的物品的价值和,每次输出占一行。

样例输入

1
3 15
50 10
16 82
7 9

样例输出

65
#include<stdio.h>
#include<algorithm>
using namespace  std;
struct goods{double V;double W;
}good[15];int cmp(goods a,goods b)
{return a.V/a.W  > b.V/b.W;
}
int main()
{int n;scanf("%d",&n);while(n--){double m;int s;scanf("%d%lf",&s,&m);for(int i = 0; i < s; i++) {scanf("%lf%lf",&good[i].V,&good[i].W);}sort(good,good+s,cmp);double count = 0.0;for(int i = 0; i < s; i++){if(m > good[i].W){m -= good[i].W;count += good[i].V;//printf("%lf\n",count);}else{count += m*good[i].V/good[i].W; //printf("%lf\n",count);break;}}printf("%.0lf\n",count);}return 0;}

1778: 买饼干

时间限制: 1 Sec  内存限制: 128 MB
提交: 110  解决: 42
[提交][状态][讨论版][Edit] [TestData]

题目描述

小明同学决定去鼎盛超市买点零食囤着慢慢吃。现在假设小明带着一定数量的现金要去超市采购饼干(散装)。如果超市有m种饼干,各种饼干的单价和重量已知,请问,为了满足更多饼干的需求(因为各种饼干味道差不多,当然是买的越多越好啊),最多能购买多少重量的饼干呢?

输入

输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是两个整数n和m(0<n<=1000,0<m<=1000),分别表示现金的金额和饼干的种类,然后是m行数据,每行包含2个整数p和h(1<=p<=25,1<=h<=100),分别表示单价和对应饼干的重量。

输出

对于每组测试数据,请输出能够购买饼干的最多重量.(你可以假设现金买不光超市所有的饼干)。
每个实例的输出占一行,保留2位小数。

样例输入

1
7 2
3 3
4 4

样例输出

2.33
#include<stdio.h>
#include<algorithm>
using namespace std;
struct cookies{double p;  //单价 double  h;  //重量
}cook[1005];
int cmp(cookies a,cookies b)
{return a.p < b.p;
}
int main()
{int C;scanf("%d",&C);while(C--){double n;int m;scanf("%lf%d",&n,&m);for(int i =  0; i < m; i++){scanf("%lf%lf",&cook[i].p,&cook[i].h);}sort(cook,cook+m,cmp);double count=0.0;for(int i = 0; i < m; i++){if(n > cook[i].h * cook[i].p){n = n - cook[i].h * cook[i].p;count += cook[i].h;}else{count += n / cook[i].p;break;}}printf("%.2lf\n",count);}
}

1783: 魔法扫帚

时间限制: 1 Sec  内存限制: 128 MB
提交: 34  解决: 23
[提交][状态][讨论版][Edit] [TestData]

题目描述

魔法师工会为了让每一位魔法师学会飞行,决定从邓布利多校长那里买一批扫帚。我们假设一个魔法师有一个等级的数字来表示他的飞行技术。只有有较高水平的魔法师可以教水平较低的人,也就是说,前者的级别大于后者。一个魔法师最多只能有一个老师,当然,没有老师也是合法的。同样的,一个魔法师最多只能有一个学生,而没有学生也是可能的。老师可以教他的学生用同样的扫帚。当然,所有的魔法师在学会飞行前都必须在扫帚柄上练习。魔法扫帚很贵!那么,你能帮助魔法师公会计算最少需要多少把扫帚吗?

输入

输入文件包含多个测试用例。
在一个测试用例中,第一行包含一个正号N表示魔法师的数量(0≤N≤3000)
下面N行:每行只有一个非负整数,表示每个士兵的等级数。等级范围为0~30;

输出

对于每一个测试样例,输出需要扫帚数量的最小值。

样例输入

4
10
20
30
4
5
2
3
4
3
4

样例输出

1
2
#include<stdio.h>
int main()
{int  N;while(scanf("%d",&N)!=EOF){int m,b[3005]={0},mark=0;for(int i = 0; i < N; i++){scanf("%d",&m);b[m]++;if(b[m] > mark){mark = b[m];} }printf("%d\n",mark);}return 0;
}

1782: 火柴字

时间限制: 1 Sec  内存限制: 128 MB
提交: 52  解决: 16
[提交][状态][讨论版][Edit] [TestData]

题目描述

小明得到了一盒火柴,他可以用这些火柴拼成各种数字。假设现有V根火柴,根据拼法的不同,拼成数字i 需要ai根火柴。

请你帮助他拼成最大的数字。

输入

有多个测试用例。
每一种情况下,第一行都包含一个非负整数V(0 ≤V ≤106)。
第二行包含九个正整数a1,a2,……,a9(1≤ai≤105)。

输出

打印出小明可以拼成的最大数字。如果他连拼成一个数字的火柴数量都不够,输出-1。

样例输入

5
5 4 3 2 1 2 3 4 5
2
9 11 1 12 5 8 9 10 6

样例输出

55555
33
#include <stdio.h>int main()
{int v,i;int a[11];while(scanf("%d",&v)!=EOF){int min,mark,count,M;scanf("%d",&a[1]);mark=1;min=a[1];for(i=2;i<=9;i++){scanf("%d",&a[i]);if(a[i]<=min)min=a[i],mark=i;}if(v<min) {printf("-1\n");continue;}count=v/min;M=v%min;while(M>0){for(i=9;i>mark;i--)if(a[i]-min<=M){printf("%d",i);count--;M-=a[i]-min;break;}if(i==mark) break;}for(i=1;i<=count;i++)printf("%d",mark);printf("\n");  }return 0;
}

1780: 火力覆盖

时间限制: 1 Sec  内存限制: 128 MB
提交: 27  解决: 16
[提交][状态][讨论版][Edit] [TestData]

题目描述

朱日和基地某次演习中,蓝军某火炮部队奉命对某长方形目标区域进行饱和打击。目标区域横向长w,纵向长h,军用卫星在它的横向中心线上不同位置处标记有n(n<=10000)个目标打击点,每个打击点i有对应不同型号的火炮负责打击,打击效果是让以打击点为中心半径为Ri的圆被火力覆盖。请选择尽量少的目标打击点,使整块目标区域被火力覆盖。

输入

第一行输入一个正整数N表示共有n次测试数据。
每一组测试数据的第一行有三个整数n,w,h,n表示共有n个目标打击点,w表示目标区域的横向长度,h表示目标区域的纵向长度。
随后的n行,都有两个整数xi和ri,xi表示第i个目标打击点的的横坐标(最左边为0),ri表示该目标打击点能火力覆盖的圆的半径

输出

每组测试数据输出一个正整数,表示共需要多少个目标打击点,每个输出单独占一行。
如果不存在一种能够把整个目标区域火力覆盖的方案,请输出0。

样例输入

2
2 8 6
1 1
4 5
2 10 6
4 5
6 5

样例输出

1
2
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
struct node{    double le, ri;
}s[1005];
int cmp(node a, node b)
{    return a.le < b.le;
}
int main()
{    int n, t;    double w, h;    scanf("%d", &t);    while(t --){    scanf("%d%lf%lf", &n, &w, &h);    h /= 2;    int i, j;    double temp, r;    for(i = 0, j = 0; i < n; i ++){    scanf("%lf%lf", &temp, &r);    if(r <= h) continue;   else{    double temp1 = sqrt(r*r-h*h);    s[j].le = temp -temp1; s[j++].ri = temp+temp1;   }    }    sort(s, s+j, cmp);  if(s[0].le > 0) {printf("0\n"); continue;}     double end = 0;    i = 0;    int cou = 0;    while(end <= w&&i < j&&cou <= n){temp = end;    while(s[i].le <= end&&i <j ){    if(s[i].ri > temp) temp = s[i].ri;    i++;    }    end = temp+0.000001;//每次都只加上0.00001,俩区间有断点,就能区分    ++cou;    }    if(end < w||cou > n){   printf("0\n");    }    else{     printf("%d\n", cou);    }    }    return 0;
}     

1777: 搬木头的熊二

时间限制: 1 Sec  内存限制: 128 MB
提交: 35  解决: 16
[提交][状态][讨论版][Edit] [TestData]

题目描述

东北原始森林经历了风暴袭击,光头强的房子被摧毁了。正好森林有被风暴摧毁而散落的木头,熊大和熊二决定帮可怜的光头强修一座新房子。熊大负责把散落的木头收集成堆,熊二负责搬木头。熊二决定把所有的木头合成一堆。 因为熊二比较懒,为了省力气,熊二开始想点子了:


每一次合并,熊二可以把两堆木头合并到一起,消耗的体力等于两堆木头的重量之和。可以看出,所有的木头经过n-1次合并之后,就只剩下一堆了。熊二在合并木头时总共消耗的体力等于每次合并所耗体力之和。 
因为还要花大力气把这些木头搬走,所以熊二在合并木头时要尽可能地节省体力。假定每根木头重量都为1,并且已知木头的堆数和每堆木头的数目,你的任务是设计出合并的次序方案,使熊二耗费的体力最少,并输出这个最小的体力耗费值。 
例如有3堆木头,数目依次为1,2,9。可以先将1、2堆合并,新堆数目为3,耗费体力为3。接着,将新堆与原先的第三堆合并,又得到新的堆,数目为12,耗费体力为12。所以熊二总共耗费体力=3+12=15。可以证明15为最小的体力耗费值。

输入

第一行输入整数N(0<N<=10)表示测试数据组数。接下来每组测试数据输入包括两行,第一行是一个整数n(1<=n<=12000),表示木头的堆数。第二行包含n个整数,用空格分隔,第i个整数ai(1<=ai<=20000)是第i堆木头的数目。

输出

每组测试数据输出包括一行,这一行只包含一个整数,也就是最小的体力耗费值。

样例输入

1 
3
1 2 9

样例输出

15
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{int  N;scanf("%d",&N);while(N--){int n;long long a[12005],b = 0;scanf("%d\n",&n);for(int i = 0; i < n; i++){scanf("%lld",&a[i]);}sort(a,a+n);for(int i = 1; i < n; i++){sort(a,a+n);a[i] = a[i]+a[i-1];b += a[i] ;}printf("%lld\n",b); }
}

XYNU—ACM暑假集训第三次测试 贪心算法相关推荐

  1. ACM暑假集训总结(2014年夏)

    ACM暑假集训总结 这篇总结本来是打算暑假集训结束后, UVa上刷够300题, 给这一路留个纪念, 可最后竟然给了自己个大耳光--298. Hehe. 既然打算写了,那该干的就得干. 一个耳光没打够, ...

  2. ACM暑假集训训练总结报告

    为期一个月的ACM暑假集训过去了,想一想,真是光阴似箭,但与以往的不同,没有哀伤,而是满满的充实,这一个月说,不得不累,虽然心里压力没有高三的强,但是时间上基本差不多,每天真的即是三点一线,日复一日. ...

  3. ACM暑假培训第三周学习总结----出自南昌理工学院ACM集训队

    8月2日 1.unsigned long long输出的时候可以使用 %llu 或者 %I64u 2.long long本质上还是整型,只不过是一种超长的整型 int型:32位整型,取值范围为[-2^ ...

  4. 【2021软件创新实验室暑假集训】SpringMVC框架(设计原理、简单使用、源码探究)

    系列文章目录 20级 Java篇 [2021软件创新实验室暑假集训]计算机的起源与大致原理 [2021软件创新实验室暑假集训]Java基础(一) [2021软件创新实验室暑假集训]Java基础(二) ...

  5. 【软件创新实验室2021年暑假集训】Java技术培训——Java前置知识学习

    [软件创新实验室2021年暑假集训]Java技术培训--Java前置知识学习 文章目录 [软件创新实验室2021年暑假集训]Java技术培训--Java前置知识学习 前言 一.了解计算机 1.计算机的 ...

  6. 暑假集训考试反思+其它乱写

    7.20 Sat 下午返校 回来改题 sdfz的巨佬觉得线上虐人不够爽,所以他们过来了 改T2的时候发现一个问题 如果要用$i$和$i\ xor\ 1$表示相邻的两条边,链式前向星tot初值必须设为1 ...

  7. 暑假集训后的一些感想

    在开学一个星期后我终于还是写下了这篇有关暑假集训博客,暑假集训的开始时间是七月十八号,是放暑假后的第三个星期.也就是说刚放假时我们还都回家了两个星期,快乐的玩耍了一阵子.随着时间的推移,时间来到七月十 ...

  8. acm暑期集训_2020.07.02

    acm暑期集训_2020.07.02 任务清单 1. 回顾ZUCC蓝桥杯热身赛-1中A.B.C题中涉及的知识点 2. 补题-----ZUCC蓝桥杯热身赛-1中D题 A题------洛谷-P1548 棋 ...

  9. 2016暑假集训小结

    小结 暑假集训之前,有很多事情在忙,什么考试,**之类.集训开始的时候还回了一趟家,这趟回家也发生了对我影响最大的事,之后想了很久,觉得也还是有必要继续走下去,因为我还是很爱这个集训队,很爱思考题解题 ...

  10. 2015暑假集训总结

    这个暑假,我很明显的感觉,我的许多方面都发现了缺陷或得到了提升. 首先是做比赛.做题策略方面的,我还有很多要改进的地方.比赛时,我总是想到一些有些神奇的想法,有时会接近正解或者就是,有时会相差甚远,打 ...

最新文章

  1. android 使用jar里 aidl,Android Studio中用gradle打包带AIDL文件的jar文件
  2. AI正从“感知智能”走向“认知智能”
  3. ssh汉字乱码怎么办_ssh中文乱码解决
  4. java线程callback,Java线程之异步回调(Callback)
  5. 64位 java 数据类型_全面解析Java支持的数据类型及Java的常量和变量类型
  6. 【数字信号处理】相关函数应用 ( 时差估计 | TOA 时差估计使用场景 | TDOA 时差估计使用场景 )
  7. SQL Server 2000 安装中的“一般性网络错误”
  8. Java异常简单介绍
  9. WCF双向通讯netTCP
  10. 设计模式(二十四)解释器模式
  11. DateTime.Now.Ticks.ToString()说明
  12. jQuery学习笔记(二)—— 操作DOM元素
  13. Win10/Win11:恢复Win7照片查看器
  14. SDHC 存储卡会导致刷机模式不被识别
  15. I2C器件之PCF8574TS调试记录
  16. 第一行代码——Android pdf
  17. 在excel图表上添加数据标签
  18. 狗年出生的宝宝取名的五大方法介绍,快来为你的宝宝起名吧
  19. Planet Explorer的简单介绍——高分辨率影像下载和使用
  20. Vue混入mixins,让你减少一半代码

热门文章

  1. iPhone/iPad解锁屏幕密码
  2. SEO入门一篇就够-SEO教程
  3. 中文期刊分类(blog版)
  4. 《Adobe After Effects CS6完全剖析》——第2章 时间标尺 营造整洁的工作流程之梦...
  5. Android监听系统来电,弹出提示窗口
  6. 常用的mysql函数及在TP中使用示例
  7. 当我们在讨论智能家居时,我们到底在讨论什么?
  8. python隐藏部分代码_python源码隐藏
  9. Python学习足迹
  10. 定时任务实现方式对比