NOIP 2012 提高组第二试模拟赛 Solution

第一题

题意

数据范围

Solution

三分求下凹函数最值

 1 #include <cstdio>
 2 #include <queue>
 3 #include <iostream>
 4 using namespace std;
 5 inline void read(int &k)
 6 {
 7     k=0;int f=1;char c=getchar();
 8     while (c<‘0‘||c>‘9‘)c==‘-‘&&(f=-1),c=getchar();
 9     while (c>=‘0‘&&c<=‘9‘)k=k*10+c-‘0‘,c=getchar();
10     k*=f;
11 }
12 const int maxn=1e5+100;
13 int n;
14 double a[maxn],b[maxn],c[maxn];
15 double l,r,lmid,rmid,tmpl,tmpr,tmplm,tmprm;
16 inline double max(double a,double b)
17 {
18     if (a<b)return b;
19     return a;
20 }
21 inline double f(double x)
22 {
23     double ans=a[1]*x*x+b[1]*x+c[1];
24     for (int i=2;i<=n;i++)
25     ans=max(a[i]*x*x+b[i]*x+c[i],ans);
26     return ans;
27 }
28 inline double abs(double a)
29 {
30     return a>0?a:-a;
31 }
32 int main()
33 {
34     freopen("curves.in","r",stdin);
35     freopen("curves.out","w",stdout);
36     read(n);
37     for (int i=1;i<=n;i++)
38     {
39         scanf("%lf%lf%lf",&a[i],&b[i],&c[i]);
40     }
41     l=0.0;r=1000.0;
42     do
43     {
44         lmid=l+(r-l)/3.0;rmid=l+(r-l)/3.0*2.0;
45         tmplm=f(lmid);tmprm=f(rmid);
46         if (f(lmid)>f(rmid))l=lmid;else r=rmid;
47     }while (abs(l-r)>1e-10);
48     printf("%.3lf\n",f(lmid));
49 }

第二题

数据范围

 

Solution

优先队列/堆模拟

 1 #include <cstdio>
 2 #include <queue>
 3 #include <iostream>
 4 using namespace std;
 5 priority_queue<int> qmax;
 6 priority_queue<int,vector<int>,greater<int> > qmin;
 7 inline void read(int &k)
 8 {
 9     k=0;int f=1;char c=getchar();
10     while (c<‘0‘||c>‘9‘)c==‘-‘&&(f=-1),c=getchar();
11     while (c>=‘0‘&&c<=‘9‘)k=k*10+c-‘0‘,c=getchar();
12     k*=f;
13 }
14 int l,n,tmp,cur=0,head=1;long long ans=0;
15 int main()
16 {
17     freopen("cate.in","r",stdin);
18     freopen("cate.out","w",stdout);
19     read(l);read(n);
20     for (int i=1;i<=n;i++)
21     {
22         read(tmp);
23         if (!tmp)
24         {
25             read(tmp);
26             if (tmp>=cur)qmin.push(tmp);else qmax.push(tmp);
27         }
28         else
29         {
30             if (head)
31             {
32                 if (qmax.empty()&&qmin.empty())continue;
33                 if (qmax.empty())
34                 {
35                     ans+=qmin.top()-cur;
36                     cur=qmin.top();
37                     qmin.pop();
38                     continue;
39                 }
40                 if (qmin.empty())
41                 {
42                     ans+=cur-qmax.top();
43                     cur=qmax.top();
44                     qmax.pop();
45                     head=0;
46                     continue;
47                 }
48                 if (cur-qmax.top()==qmin.top()-cur)
49                 {
50                     ans+=qmin.top()-cur;
51                     cur=qmin.top();
52                     qmin.pop();
53                 }
54                 else
55                 {
56                     if (qmin.top()-cur<cur-qmax.top())ans+=qmin.top()-cur,cur=qmin.top(),qmin.pop();
57                     else head=0,ans+=cur-qmax.top(),cur=qmax.top(),qmax.pop();
58                 }
59             }
60             else
61             {
62                 if (qmax.empty()&&qmin.empty())continue;
63                 if (qmax.empty())
64                 {
65                     ans+=qmin.top()-cur;
66                     cur=qmin.top();
67                     qmin.pop();
68                     head=1;
69                     continue;
70                 }
71                 if (qmin.empty())
72                 {
73                     ans+=cur-qmax.top();
74                     cur=qmax.top();
75                     qmax.pop();
76                     continue;
77                 }
78                 if (cur-qmax.top()==qmin.top()-cur)
79                 {
80                     ans+=cur-qmax.top();
81                     cur=qmax.top();
82                     qmax.pop();
83                 }
84                 else
85                 {
86                     if (qmin.top()-cur>cur-qmax.top())ans+=cur-qmax.top(),cur=qmax.top(),qmax.pop();
87                     else head=1,ans+=qmin.top()-cur,cur=qmin.top(),qmin.pop();
88                 }
89             }
90         }
91     }
92     printf("%lld\n",ans);
93 }

第三题

题意

数据范围

Solution

O(n^2)/60%:dfs(遍历整颗树)

 1 #include <cstdio>
 2 #include <queue>
 3 #include <iostream>
 4 #include <cstring>
 5 #define ll long long
 6 using namespace std;
 7 inline void read(ll &k)
 8 {
 9     k=0;ll f=1;char c=getchar();
10     while (c<‘0‘||c>‘9‘)c==‘-‘&&(f=-1),c=getchar();
11     while (c>=‘0‘&&c<=‘9‘)k=k*10+c-‘0‘,c=getchar();
12     k*=f;
13 }
14 const int maxn=300100*2;
15 bool v[maxn];
16 ll n,x,y,z,ans,la,tot,last[maxn],next[maxn],value[maxn],to[maxn],col[maxn];
17 void dfs(int now,ll sum,int dep,int la)
18 {
19     v[now]=1;
20     for (int cur=last[now];cur;cur=next[cur])
21     if ((col[cur]!=la)&&(!v[to[cur]]))
22         dfs(to[cur],sum+value[to[cur]],dep+1,col[cur]);
23     if (dep)
24     ans+=sum;
25 }
26 int main()
27 {
28     freopen("gorgeous.in","r",stdin);
29     freopen("gorgeous.out","w",stdout);
30     read(n);
31     for (int i=1;i<=n;i++)
32     read(value[i]);
33     for (int i=1;i<n;i++)
34     {
35         read(x);read(y);read(z);
36         next[++tot]=last[x];
37         to[tot]=y;
38         col[tot]=z;
39         last[x]=tot;
40         next[++tot]=last[y];
41         to[tot]=x;
42         col[tot]=z;
43         last[y]=tot;
44     }
45     for (int i=1;i<=n;i++)
46     {
47         memset(v,0,sizeof(v));
48         dfs(i,value[i],0,0);
49     }
50     printf("%lld\n",ans/2);
51 }

时间: 2024-10-03 22:51:33

NOIP 2012 提高组第二试模拟赛 Solution的相关文章

扩展欧几里得模板(洛谷1082 同余方程NOIP 2012 提高组 第二天 第一题)

题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输出只有一行,包含一个正整数 x0,即最小正整数解.输入数据保证一定有解. 输入输出样例 输入样例#1: 3 10 输出样例#1: 7 说明 [数据范围] 对于 40%的数据,2 ≤b≤ 1,000: 对于 60%的数据,2 ≤b≤ 50,000,000: 对于 100%的数据,2 ≤a, b≤ 2,000,000,000

NOIP 2012 提高组 DAY1 T2 国王游戏

题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在队伍的最前面.排好队后,所有的大臣都会获得国王奖赏的若干金币,每 位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右 手上的数,然后向下取整得到的结果. 国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序, 使得获得奖赏最多的大臣,所获奖赏尽可能的少

二分查找or线段树(借教室洛谷1083vijos1782NOIP 2012 提高组 第二天 第二题)

在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自然希望编程解决这个问题.我们需要处理接下来n天的借教室信息,其中第i天学校有ri个教室可供租借.共有m份订单,每份订单用三个正整数描述,分别为dj,sj,tj,表示某租借者需要从第sj天到第tj天租借教室(包括第sj天和第tj天),每天需要租借dj个教室. 我们假定,租借者对教室的大小.地点没有要求.即对于每份

模拟(玩具谜题NOIP 2016 提高组 Day 1 第一题vijos2003)

描述 小南有一套可爱的玩具小人,它们各有不同的职业. 有一天,这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外.如下图: 这时singer告诉小南一个谜题:“眼镜藏在我左数第3个玩具小人的右数第1个玩 具小人的左数第2个玩具小人那里.” 小南发现,这个谜题中玩具小人的朝向非常关键,因为朝内和朝外的玩具小人的左右方向是相反的:面朝圈内的玩具小人,它的左边是顺时针方向,右边是逆时针方向:而面向圈外的玩具小人,它的左边是逆时针方向,右边是顺时针方向. 小

NOIP 2014 提高组 题解

NOIP 2014 提高组 题解 No 1. 生活大爆炸版石头剪刀布 http://www.luogu.org/problem/show?pid=1328 这是道大水题,我都在想怎么会有人错了,没算法,直接模拟,别读错题. 1 int wn[5][5]={{2,0,1,1,0}, 2 {1,2,0,1,0}, 3 {0,1,2,0,1}, 4 {0,0,1,2,1}, 5 {1,1,0,0,2}}; 6 7 int n,na,nb; 8 int a[222],b[222]; 9 int s1,s

2019浙大计算机考研机试模拟赛(2)——概念专题

题目链接   引用自晴神OJ A - 边覆盖 B - 极大独立集 C - 稳定婚姻问题 D - 笛卡尔树 没赶得上全程的比赛,就做了两道,后面两道以后有时间再补.两道都是概念题,比较基础~ 以下是题解 A - 边覆盖 Case Time Limit: 200 MS (Others) / 400 MS (Java)       Case Memory Limit: 256 MB (Others) / 512 MB (Java) Accepted: 199      Total Submission

NOIP 2008提高组第三题题解by rLq

啊啊啊啊啊啊今天已经星期三了吗 那么,来一波题解吧 本题地址http://www.luogu.org/problem/show?pid=1006 传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是,他们可以通过传纸条来进行交流.纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标(1,1),小轩坐在矩阵的右下角,坐标(m,n).从小渊

NOIP 2006 提高组 t1 能量项链

题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记.因为只有这样,通过吸盘(吸盘是Mars人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量.如果前一颗能量珠的头标记为m,尾标记为r,后一颗能量珠的头标记为r,尾标记为n,则聚合后释放的能量为m*r*n(Mars单位),新产生的珠子的头标

NOIP第二次模拟赛 stage1【划分数列(seq.pas/c/cpp)

7划分数列(seq.pas/c/cpp) [题目描述] 给你一个有n个元素的数列,要求把它划分成k段,使每段元素和的最大值最小 [输入格式] 第一行两个正整数n,k 第二行为此数列ai [输出格式] 一行一个数,为题目所求答案 [样例输入] 5 2 2 1 3 4 5 [样例输出] 9 [数据规模] 30%数据 n <= 30, k <= 10 100%数据 n <= 100000, k <= n, ai <= 10^9 150%数据 n <= 100000, k &l