小明得到了一盒火柴,他可以用这些火柴拼成各种数字。假设现有V根火柴,根据拼法的不同,拼成数字i 需要ai根火柴。
请你帮助他拼成最大的数字。
灯光师小明控制着各种晚会的各种大小灯,每次晚会小明都会对灯进行很多次操作。对每盏灯只能进行两种操作,开和关。现在小明希望自己随时都知道还有多少盏灯亮着。你需要编写一个程序当小明问你时你能快速的说出还有多少盏灯亮着。 注意晚会开始时所有的灯都是灭的。
只有一组数据.第一行输入两个正整数N,T(0
每次查询指令输出占一行,输出当前亮着灯的个数
10 8
CHANGE 1
QUERY
CHANGE 2
QUERY
CHANGE 1
CHANGE 9
CHANGE 7
QUERY
1
2
3
显然灯的序号是从1开始的。
#include
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);
}
}
第一行输入彩灯的数量N(1<= N <= 1000),接下来的N行输入N个字符串表示彩灯的颜色(字符串的长度不超过10,字符串全为小写字母,并且只有一组测试数据)。保证彩灯颜色不超过1000种。
输出这些彩灯中最多的颜色的名字与数量,并用空格隔开(数据保证最多的颜色只有一个)。
12
red
green
blue
white
red
green
blue
white
red
green
blue
red
red 4
#include
#include
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
现在有很多物品(它们是可以分割的),我们知道它们每个物品的总价值v和重量w(1<=v,w<=100;如果给你一个背包它能容纳的重量为m(10<=m<=100),你所要做的就是把物品装到背包里,使背包里的物品的价值总和最大。
输出每组测试数据中背包内的物品的价值和,每次输出占一行。
1
3 15
50 10
16 82
7 9
65
#include
#include
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;
}
小明同学决定去鼎盛超市买点零食囤着慢慢吃。现在假设小明带着一定数量的现金要去超市采购饼干(散装)。如果超市有m种饼干,各种饼干的单价和重量已知,请问,为了满足更多饼干的需求(因为各种饼干味道差不多,当然是买的越多越好啊),最多能购买多少重量的饼干呢?
对于每组测试数据,请输出能够购买饼干的最多重量.(你可以假设现金买不光超市所有的饼干)。
每个实例的输出占一行,保留2位小数。
1
7 2
3 3
4 4
2.33
#include
#include
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);
}
}
对于每一个测试样例,输出需要扫帚数量的最小值。
4
10
20
30
4
5
2
3
4
3
4
1
2
#include
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;
}
小明得到了一盒火柴,他可以用这些火柴拼成各种数字。假设现有V根火柴,根据拼法的不同,拼成数字i 需要ai根火柴。
请你帮助他拼成最大的数字。
5
5 4 3 2 1 2 3 4 5
2
9 11 1 12 5 8 9 10 6
55555
33
#include
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(v0)
{
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;
}
2
2 8 6
1 1
4 5
2 10 6
4 5
6 5
1
2
#include
#include
#include
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 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;
}
东北原始森林经历了风暴袭击,光头强的房子被摧毁了。正好森林有被风暴摧毁而散落的木头,熊大和熊二决定帮可怜的光头强修一座新房子。熊大负责把散落的木头收集成堆,熊二负责搬木头。熊二决定把所有的木头合成一堆。 因为熊二比较懒,为了省力气,熊二开始想点子了:
每一次合并,熊二可以把两堆木头合并到一起,消耗的体力等于两堆木头的重量之和。可以看出,所有的木头经过n-1次合并之后,就只剩下一堆了。熊二在合并木头时总共消耗的体力等于每次合并所耗体力之和。
因为还要花大力气把这些木头搬走,所以熊二在合并木头时要尽可能地节省体力。假定每根木头重量都为1,并且已知木头的堆数和每堆木头的数目,你的任务是设计出合并的次序方案,使熊二耗费的体力最少,并输出这个最小的体力耗费值。
例如有3堆木头,数目依次为1,2,9。可以先将1、2堆合并,新堆数目为3,耗费体力为3。接着,将新堆与原先的第三堆合并,又得到新的堆,数目为12,耗费体力为12。所以熊二总共耗费体力=3+12=15。可以证明15为最小的体力耗费值。
第一行输入整数N(0
每组测试数据输出包括一行,这一行只包含一个整数,也就是最小的体力耗费值。
1
3
1 2 9
15
#include
#include
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);
}
}