ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【2019.3.16】NOIP模拟测试190316

2019-05-11 11:51:59  阅读:223  来源: 互联网

标签:ch NOIP 16 int ll 样例 整数 2019.3 while


 

T1 浇水

  • 【题目描述】

  LazyChild在青岛二中科技楼里种了一排n棵树,每棵树都有一个高度。他会枚举所有的区间,然后从区间中找出一个高度最矮的树进行浇水(照顾弱者)。由于LazyChild浇完水之后就精疲力竭了,所以请你帮助他计算每棵树都被浇了几次水。

  • 【输入文件】

  第一行一个整数n。
  第二行n个整数,分别表示每棵树的高度。

  • 【输出文件】

  一行n个整数用空格隔开,分别表示每棵树被浇了几次水。

  • 【样例输入】

  3
  1 3 5

  • 【样例输出】

  3 2 1

  • 【样例解释】

  LazyChild枚举到了6个区间分别是[1], [3], [5], [1 3], [3 5], [1 3 5],对应的最矮的树的高度是1, 3, 5, 1, 3, 1。

  • 【数据规模和约定】

  对于40%的数据,n <= 1000
  对于100%的数据,n <= 1000000,保证每棵树的高度都不相同

  我....推了好久这个的乘法原理 我多半是废了

  然后出来之后 就这么几行 短小精悍蕴含无限的奥妙令人不禁伸颈侧目微笑默叹以为妙绝

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N=1000000+5; 
 4 #define ll long long
 5 int n,a[N],l[N],r[N];
 6  
 7 template<class t>void rd(t &x)
 8 {
 9     x=0;int w=0;char ch=0;
10     while(!isdigit(ch)) w|=ch=='-',ch=getchar();
11     while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
12     x=w?-x:x;
13 }
14  
15 int main()
16 {
17     rd(n);a[0]=a[n+1]=-1;
18     for(int i=1;i<=n;++i) rd(a[i]),l[i]=i-1,r[i]=i+1;
19     for(int i=1;i<=n;++i) while(a[l[i]]>a[i]) l[i]=l[l[i]];//向左移 
20     for(int i=n;i>0;--i) while(a[r[i]]>a[i]) r[i]=r[r[i]];//向右移
21     for(int i=1;i<=n;++i) printf("%lld ",(long long)(i-l[i])*(r[i]-i));//乘法原理 
22     return 0;
23 }
100昏 单调栈

T2 ABCDEF

  • 【题目描述】

  LazyChild有n个在[-30000,30000]区间内的整数,他想知道有多少个六元组(a,b,c,d,e,f)满足: (a × b + c) ÷ d – e = f

  • 【输入文件】

  第一行一个整数n。
  第二行n个整数。

  • 【输出文件】

  一行一个整数,表示有多少个满足要求的六元组。

  • 【样例输入】

  2
  2 3

  • 【样例输出】

  4

  • 【数据规模和约定】

  对于30%的数据,1 <= n <= 10
  对于100%的数据,1 <= n <= 100
因为一直咕咕咕去学hash的进程 导致看这个题 会有无数大胆的想法 最后屈服写一个六重循环最后居然还运行错误我.....

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define ll long long
 4 #define rg register
 5 const ll N=105;
 6 int n;
 7 ll a[N],ans=0;
 8 map<ll,ll> m;
 9 template<class t>void rd(t &x)
10 {
11     x=0;int w=0;char ch=0;
12     while(!isdigit(ch)) w|=ch=='-',ch=getchar();
13     while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
14     x=w?-x:x;
15 }
16 
17 int main()
18 {
19     rd(n);
20     for(rg int i=1;i<=n;++i) rd(a[i]);
21     for(rg int ai=1;ai<=n;++ai)
22     for(rg int bi=1;bi<=n;++bi)
23     for(rg int ci=1;ci<=n;++ci)
24     ++m[a[ai]*a[bi]+a[ci]];
25     for(rg int di=1;di<=n;++di)
26     for(rg int ei=1;ei<=n;++ei)
27     for(rg int fi=1;fi<=n;++fi)
28     if(!a[di]) continue;
29     else ans+=m[(a[fi]+a[ei])*a[di]];
30     printf("%lld",ans);
31     return 0;
32 }
100昏 map

然鹅 应该用hash来写 快的一批 map在洛谷上根本过不了

 

标签:ch,NOIP,16,int,ll,样例,整数,2019.3,while
来源: https://www.cnblogs.com/lxyyyy/p/10547578.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有