我也不知道这是什么类型的题,算是简单模拟吧。但是有个方法很赞。
开两个数组,一个模拟花,一个记录不同浇花次数花的数量;
要找浇水的次数,那么记每次浇水的开头和结尾就行了,a—b;那么f[a]++;f[b+1]--;
然后0—n循环;剪枝的话,可以找到最小浇花的数min和最大浇花的数max。
找到当前的浇水次数,t+=f[i], cnt[t]++;最后输出浇花次数的花数。
1 #include <bits/stdc++.h> 2 using namespace std; 3 int f[1000005]; 4 int cnt[200005]; 5 //ifstream fin("a.txt"); 6 int main() 7 { 8 int n;cin>>n;int min=1000001,max=0; 9 for(int i=1;i<=n;i++) 10 { 11 int a,b; 12 cin>>a>>b; 13 min=min<a?min:a; 14 max=max>b?max:b; 15 16 f[a]++;f[b+1]--; 17 } 18 int t=0; 19 for(int i=min;i<=max;i++) 20 { 21 f[i]+=f[i-1]; 22 cnt[f[i]]++; 23 } 24 25 for(int i=1;i<=n;i++) 26 { 27 cout <<cnt[i]<<" "; 28 } 29 cout <<endl; 30 return 0; 31 }
ps:一定要认真读题!一定要认真读题!一定要认真读题!
原文:https://www.cnblogs.com/Msmw/p/10201415.html