PDD9. 小熊吃糖
描述
输入描述
第一行两个正整数n和m,分别表示小熊数量和糖的数量。(n <= 10, m <= 100) 第二行m个正整数,每个表示着颗糖能填充的饥饿值。 接下来的n行,每行2个正整数,分别代表每只小熊的战斗力和当前饥饿值。 题目中所有输入的数值小于等于100。输出描述
输出n行,每行一个整数,代表每只小熊剩余的饥饿值。示例1
输入:
2 5 5 6 10 20 30 4 34 3 35
输出:
4 0
说明:
第一只小熊吃了第5颗糖 第二只小熊吃了第4颗糖 第二只小熊吃了第3颗糖 第二只小熊吃了第1颗糖C 解法, 执行用时: 2ms, 内存消耗: 316KB, 提交时间: 2022-06-07
#include <stdio.h> int cmpNum(const void *a, const void *b) { int *a1 = (int *)a; int *b1 = (int *)b; return (*b1 - *a1); } int main() { int n, m;//小熊数量,糖的数量 while (scanf("%d %d", &n, &m) != EOF) { int *m_num = (int *)malloc(sizeof(int) * m); for (int i = 0; i < m; i++) {//糖果饥饿值 scanf("%d ", &m_num[i]); } int a[10][2] = {0}; int tmp[10] = {0}; //每只熊战斗力和饥饿值 for (int i = 0; i < n; i++) { scanf("%d %d\n", &a[i][0], &a[i][1]); tmp[i] = a[i][0]; } qsort(m_num, m, sizeof(int), cmpNum); qsort(a, n, sizeof(int) * 2, cmpNum); for (int j = 0; j < n; j++) { for (int i = 0; i < m; i++) { if (a[j][1] >= m_num[i]) { a[j][1] -= m_num[i]; m_num[i] = 300; } } } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (a[j][0] == tmp[i]) { printf("%d\n", a[j][1]); } } } free(m_num); } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 368KB, 提交时间: 2019-02-16
#include <stdio.h> #include <stdlib.h> int swap(int *a,int *b) { int temp = *a; *a = *b; *b = temp; return 0; } int main() { int bear,suger; int *suger_hunger; int (*battle)[2]; int *odr; int i = 0,j = 0; scanf("%d%d",&bear,&suger); suger_hunger = (int *)malloc(sizeof(int)*suger); odr = (int *)malloc(sizeof(int)*bear); for(i = 0;i<bear;i++) { odr[i] = i; } for(i = 0;i<suger;i++) { scanf("%d",&suger_hunger[i]); } battle = (int(*)[2])malloc(sizeof(int)*2*bear); for(i = 0;i<bear;i++) { scanf("%d%d",&battle[i][0],&battle[i][1]); } for(i = 0;i<bear;i++) { for(j = 0;j<(bear - 1 -i);j++) { if(battle[odr[j]][0] <= battle[odr[j+1]][0]) { swap(&odr[j],&odr[j+1]); } } } for(i = 0;i<suger;i++) { for(j = 0;j<(suger - i - 1);j++) { if(suger_hunger[j] < suger_hunger[j+1]) { swap(&suger_hunger[j],&suger_hunger[j+1]); } } } for(i = 0;i<bear;i++) { for(j = 0;j < suger;j++) { if(battle[odr[i]][1] >= suger_hunger[j]) { if((battle[odr[i]][1] > 0)&&(suger_hunger[j] != 0)) { battle[odr[i]][1] -= suger_hunger[j]; suger_hunger[j] = 0; } } } } for(i = 0;i<bear;i++) { printf("%d\n",battle[i][1]); } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 372KB, 提交时间: 2020-11-23
#include <stdio.h> int main() { int n,m,a[11],b[11],max[11]; scanf("%d %d",&n,&m); int su[100]; for(int i=0;i<m;i++) { scanf("%d",&su[i]); } for(int i=1;i<=n;i++) { scanf("%d %d",&a[i],&b[i]); max[i]=i; } for(int i=1;i<=n;i++) { for(int j=1;j<=n-i;j++) { if(a[j]<a[j+1]) { int temp; temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; int temp2; temp2=max[j]; max[j]=max[j+1]; max[j+1]=temp2; } } } for(int i=0;i<m-1;i++) { for(int j=0;j<m-1-i;j++) { if(su[j]<su[j+1]) { int temp; temp=su[j]; su[j]=su[j+1]; su[j+1]=temp; } } } for(int i=1;i<=n;i++) { for(int j=0;j<m;j++) { if(b[max[i]]-su[j]>=0) { b[max[i]]=b[max[i]]-su[j]; su[j]=0; } } } for(int i=1;i<=n;i++) printf("%d\n",b[i]); }
C 解法, 执行用时: 2ms, 内存消耗: 372KB, 提交时间: 2018-09-13
#include <stdio.h> #include <stdlib.h> int x[105]; typedef struct LHY { int leng; int jie; int num; }lhy; lhy a[150]; int main() { int n,m; int i,j; int swap; while(scanf("%d%d",&n,&m)!=EOF) { for(i=1;i<=m;i++) scanf("%d",&x[i]); for(i=1;i<=n;i++) { scanf("%d %d",&a[i].leng,&a[i].jie); a[i].num=i; } for(i=1;i<=n;i++) { for(j=i+1;j<=n;j++) { if(a[i].leng<a[j].leng) { swap=a[i].leng; a[i].leng=a[j].leng; a[j].leng=swap; swap=a[i].jie; a[i].jie=a[j].jie; a[j].jie=swap; swap=a[i].num; a[i].num=a[j].num; a[j].num=swap; } } } int flag=1; int max=-1; int node; for(i=1;i<=n;i++) { flag=0; max=0; while(flag==0) { max=0; flag=1; for(j=1;j<=m;j++) { if(x[j]!=0&&x[j]<=a[i].jie&&x[j]>max) { max=x[j]; node=j; flag=0; } } if(flag==0) { a[i].jie=a[i].jie-max; x[node]=0; } } } for(i=1;i<=n;i++) { for(j=i+1;j<=n;j++) { if(a[i].num>a[j].num) { swap=a[i].leng; a[i].leng=a[j].leng; a[j].leng=swap; swap=a[i].jie; a[i].jie=a[j].jie; a[j].jie=swap; swap=a[i].num; a[i].num=a[j].num; a[j].num=swap; } } } for(i=1;i<=n;i++) printf("%d\n",a[i].jie); } return 0; }
C++ 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2020-11-28
#include<iostream> #include<vector> #include<algorithm> using namespace std; struct t { int first; int second; int xuhao; }; bool com(t a, t b) { if (a.first > b.first) return true; return false; } bool co(t a, t b) { if (a.xuhao < b.xuhao) return true; return false; } int main() { int n,m; while (cin >> n >> m) { vector<int> p(m); for (int i = 0; i < m; i++) cin >> p[i]; sort(p.begin(), p.end()); vector<t> tt(n); for (int i = 0; i < n; i++) { cin >> tt[i].first; cin >> tt[i].second; tt[i].xuhao = i; //cout << 1 << endl; } sort(tt.begin(), tt.end(),com); for (int i = 0; i < n; i++) { bool flag = 1; while(tt[i].second>0) { flag = 0; int maxval = 0; int pos=0; for (int j = 0; j < p.size(); j++) { if (p[j] > maxval && p[j] <= tt[i].second) { maxval = p[j]; pos = j; flag = 1; } } if (flag) { tt[i].second -= maxval; maxval = 0; p.erase(p.begin() + pos); } else break; } } sort(tt.begin(),tt.end(), co); for (int i = 0; i < n; i++) { cout << tt[i].second << endl; } } return 0; }