NC50162. 种树
描述
输入描述
第一行为n,表示路段数。
第二行为h,表示建议数。
下面 h 行描述一条建议:b,e,t,用一个空格分隔。
输出描述
输出只有一个数,为满足所有居民的建议,所需要种树的最少数量。
示例1
输入:
9 4 1 4 2 4 6 2 8 9 2 3 5 2
输出:
5
C++(g++ 7.5.0) 解法, 执行用时: 67ms, 内存消耗: 484K, 提交时间: 2022-08-10 16:08:08
#include<bits/stdc++.h> using namespace std; int n,h; struct edu{ int b,e,t; } a[5010]; bool use[30005]; int ans=0,k; bool cmp(edu x,edu y) { return x.e<y.e; } int main() { cin>>n>>h; for(int i=1;i<=h;i++)cin>>a[i].b>>a[i].e>>a[i].t; sort(a+1,a+h+1,cmp); for(int i=1;i<=h;i++) { k=0; for(int j=a[i].b;j<=a[i].e;j++)if(use[j])k++; if(k>=a[i].t)continue; for(int j=a[i].e;j>=a[i].b;j--) { if(!use[j]){ use[j]=true; k++; ans++; if(k==a[i].t)break; } } } cout<<ans; return 0; }
C++(clang++11) 解法, 执行用时: 34ms, 内存消耗: 648K, 提交时间: 2020-10-22 08:37:42
#include<iostream> #include<algorithm> using namespace std; int n,h,used[40000],k,ans; struct node{ int b,e,d; }a[5001]; bool cmp(node a,node b) { return a.e<b.e; } int main() { cin>>n>>h; for(int i=1;i<=h;i++) cin>>a[i].b>>a[i].e>>a[i].d; sort(a+1,a+h+1,cmp); for(int i=1;i<=h;i++) { k=0; for(int j=a[i].b;j<=a[i].e;j++) if(used[j])k++; if(k>=a[i].d)continue; for(int j=a[i].e;j>=a[i].b;j--) {if(!used[j]){ used[j]=1; k++; ans++; if(k==a[i].d)break;} } } cout<<ans; return 0; }
C++14(g++5.4) 解法, 执行用时: 58ms, 内存消耗: 732K, 提交时间: 2020-06-08 18:47:18
#include<bits/stdc++.h> using namespace std; const int N=3e4+10; struct node { int s,e,t; }a[N]; int n,h,vis[N],ans; bool cmp(node a,node b) { return a.e<b.e; } int main() { scanf("%d%d",&n,&h); for(int i=0;i<h;i++) scanf("%d%d%d",&a[i].s,&a[i].e,&a[i].t); sort(a,a+h,cmp); for(int i=0;i<h;i++) { int s=0; for(int j=a[i].s;j<=a[i].e&&s<a[i].t;j++) { if(vis[j])s++; } for(int j=a[i].e;j>=a[i].s&&s<a[i].t;j--) if(!vis[j]){ s++;ans++;vis[j]=1; } } printf("%d\n",ans); }
Python3 解法, 执行用时: 1243ms, 内存消耗: 6236K, 提交时间: 2022-10-14 12:00:46
import sys n = int(sys.stdin.readline().strip()) h = int(sys.stdin.readline().strip()) l = [] for i in range(h): l.append(list(map(int,sys.stdin.readline().strip().split(' ')))) l.sort(key=lambda x:x[1]) tree = [0]*n for a in l: current = sum(tree[a[0]-1:a[1]]) need = a[2]-current for i in range(a[1]-1,a[0]-2,-1): if need<=0: break else: if tree[i]==0: tree[i]=1 need -= 1 print(sum(tree))