2017.9.5 考试

T1

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #define ll long long
 5 #define dd double
 6 #define mem(a,b) memset(a,b,sizeof(a))
 7 using namespace std;
 8
 9 int n,intemp,maxp;
10 ll sum;
11 dd p[26];
12 dd f[(1<<20)+10];
13 int cnt[(1<<20)+10];
14
15 void dp()
16 {
17     for(int i=0;i<=maxp;++i)
18         for(int k=1;k<=n;++k)
19             if( i&(1<<(k-1)) )
20                 ++cnt[i];
21     dd temp;
22     for(int num=1;num<=n;++num)
23         for(int j=1;j<=maxp;++j)
24             if(cnt[j]==num)
25             {
26                 temp=0;
27                 f[j]=1;
28                 for(int k=1;k<=n;++k)
29                     if( (1<<(k-1))&j )
30                     {
31                         temp+=p[k];
32                         f[j]+=f[ j^(1<<(k-1)) ]*p[k];
33                     }
34                 f[j]/=temp;
35             }
36     /*f[maxp]=1;
37     for(int k=1;k<=n;++k)
38         f[maxp]+=f[maxp^(1<<(k-1))]*p[k];*/
39     printf("%.3lf",f[maxp]);
40
41     /*printf("\n");
42     for(int i=0;i<=maxp;++i)
43         printf("i=%d %.3lf \n",i,f[i]);*/
44
45 }
46
47 int main(){
48
49     scanf("%d",&n);
50     maxp=(1<<n)-1;
51     for(int i=1;i<=n;++i)
52     {
53         scanf("%lf%d",&p[i],&intemp);
54         sum+=intemp;
55     }
56     printf("%lld\n",sum);
57     dp();
58 }

100

T2

  1 #include <cstdio>
  2 #include <cstring>
  3 #include <iostream>
  4 #include <algorithm>
  5 #define ll long long
  6 #define mem(a,b) memset(a,b,sizeof(a))
  7 using namespace std;
  8 const int N=50006;
  9 const int M=100006;
 10 inline int minn(int a,int b){return a<b?a:b;}
 11 struct son
 12 {
 13     int v,next,w;
 14 };
 15 son a1[M*3];
 16 int first[M*3],e;
 17 void addbian(int u,int v,int w)
 18 {
 19     a1[e].v=v;
 20     a1[e].w=w;
 21     a1[e].next=first[u];
 22     first[u]=e++;
 23 }
 24
 25 struct son2
 26 {
 27     int u,v,w;
 28     bool friend operator < (son2 a,son2 b)
 29     {
 30         return a.w<b.w;
 31     }
 32 };
 33 son2 ji[M*2];
 34 int sum;
 35
 36 int n,m;
 37 int u,o,oo;
 38 int dfn[N],low[N],now;
 39 int dui[N],cnt;
 40 int zhan[N*2],he;
 41 bool flag[N*2];
 42 ll ans;
 43
 44 void tarjan(int x)
 45 {
 46     dfn[x]=low[x]=++now;
 47     zhan[++he]=x;flag[x]=1;
 48     for(int i=first[x];i!=-1;i=a1[i].next)
 49     {
 50         int temp=a1[i].v;
 51         if(dfn[temp]==-1)
 52         {
 53             tarjan(temp);
 54             low[x]=minn(low[x],low[temp]);
 55         }
 56         else
 57             if(flag[temp])
 58                 low[x]=minn(low[x],dfn[temp]);
 59     }
 60     if(low[x]==dfn[x])
 61     {
 62         ++cnt;
 63         int temp;
 64         while(1)
 65         {
 66             temp=zhan[he--];
 67             flag[temp]=0;
 68             dui[temp]=cnt;
 69             if(temp==x)
 70                 break;
 71         }
 72     }
 73 }
 74
 75 int fa[N];
 76 int fin(int x)
 77 {
 78     if(fa[x]==-1)
 79         return x;
 80     fa[x]=fin(fa[x]);
 81     return fa[x];
 82 }
 83
 84 bool judge[N];
 85
 86 void mn_tree()
 87 {
 88     int temp1,temp2,sumnow=0;
 89     for(int i=1;i<=sum;++i)
 90     {
 91         temp1=fin(ji[i].u);
 92         temp2=fin(ji[i].v);
 93         if(temp1!=temp2&&judge[ji[i].v]==0)
 94         {
 95             fa[temp1]=temp2;
 96             ++sumnow;
 97             ans+=ji[i].w;
 98             judge[ji[i].v]=1;
 99         }
100         if(sumnow==cnt-1)
101             break;
102     }
103 }
104
105 void out11()
106 {
107     printf("\n");
108     for(int i=0;i<n;++i)
109         printf("i=%d dui[i]=%d\n",i,dui[i]);
110     printf("\n");
111     /*printf("e1=%d\n",h[1].e);
112     for(int i=0;i<h[1].e;++i)
113         printf("w=%d\n",h[1].a1[i].w);*/
114 }
115
116 void work()
117 {
118     for(int i=0;i<n;++i)
119         if(dfn[i]==-1)
120             tarjan(i);
121     for(int i=0;i<n;++i)
122         for(int j=first[i];j!=-1;j=a1[j].next)
123         {
124             int temp=a1[j].v;
125             if(dui[i]!=dui[temp]&&dui[temp]!=dui[0])
126             {
127                 ji[++sum]=(son2){dui[i],dui[temp],a1[j].w};
128                 //printf("i=%d u=%d v=%d w=%d\n",sum,ji[sum].u,ji[sum].v,ji[sum].w);
129             }
130         }
131     sort(ji+1,ji+1+sum);
132     //out11();
133
134     mn_tree();
135     cout<<ans<<endl;
136 }
137
138 int main(){
139
140     //freopen("1.txt","r",stdin);
141
142
143     while(1)
144     {
145         ans=0;
146         mem(judge,0);
147         mem(dfn,-1);mem(low,0);now=0;mem(dui,0);cnt=0;
148         he=0;mem(flag,0);
149         mem(fa,-1);
150         mem(ji,0);sum=0;
151         mem(first,-1);
152         mem(a1,0);e=0;
153
154         scanf("%d%d",&n,&m);
155         if(n==0||m==0)
156             break;
157
158         for(int i=1;i<=m;++i)
159         {
160             scanf("%d%d%d",&u,&o,&oo);
161             addbian(u,o,oo);
162         }
163         work();
164     }
165 }

100

T3

  1 #include <cstdio>
  2 #include <cstring>
  3 #include <iostream>
  4 #include <algorithm>
  5 #define ll long long
  6 #define dd double
  7 #define mem(a,b) memset(a,b,sizeof(a))
  8 using namespace std;
  9 const int INF=0x7fffffff;
 10 const int N=300006;
 11 inline int minn(int a,int b){return a<b?a:b;}
 12 inline int maxn(int a,int b){return a>b?a:b;}
 13
 14 int n;
 15 int u,o;
 16 int a[N];
 17 int mn[N],mx[N];
 18 ll tong[N*2+1000];
 19 //int mnl[N],mnr[N],mxl[N],mxr[N];
 20
 21 ll get(int l,int r)
 22 {
 23     if(l==r)
 24         return 1;
 25     int mid=(l+r)>>1,temp1,temp2,temp;
 26     ll ans=get(l,mid)+get(mid+1,r);
 27     //mem(mn,127);mem(mx,0);
 28     mn[mid]=mx[mid]=a[mid];
 29     mn[mid+1]=mx[mid+1]=a[mid+1];
 30     for(int i=mid-1;i>=l;--i)
 31     {
 32         mn[i]=minn(mn[i+1],a[i]);
 33         mx[i]=maxn(mx[i+1],a[i]);
 34     }
 35     for(int i=mid+2;i<=r;++i)
 36     {
 37         mn[i]=minn(mn[i-1],a[i]);
 38         mx[i]=maxn(mx[i-1],a[i]);
 39     }
 40     for(int i=l;i<=mid;++i)
 41     {
 42         temp=i+mx[i]-mn[i];
 43         if(temp<=mid||temp>r)
 44             continue;
 45         if(mn[i]<mn[temp]&&mx[i]>mx[temp])
 46             ++ans;
 47     }
 48     for(int i=mid+1;i<=r;++i)
 49     {
 50         temp=i-(mx[i]-mn[i]);
 51         if(temp>mid||temp<l)
 52             continue;
 53         if(mn[i]<mn[temp]&&mx[i]>mx[temp])
 54             ++ans;
 55     }
 56     /*printf("nwonwwonwwownw   l=%d r=%d mid=%d\n",l,r,mid);
 57     printf("max=\n");
 58     for(int i=l;i<=r;++i)
 59         printf("%d ",mx[i]);
 60     printf("\nmin=\n");
 61     for(int i=l;i<=r;++i)
 62         printf("%d ",mn[i]);
 63     printf("\n");*/
 64     // min | max
 65     //printf("now_is_left_min_right_max\n");
 66     temp1=mid+1;temp2=mid;
 67     for(int i=mid;i>=l;--i)
 68     {
 69         while(mn[temp2+1]>mn[i]&&temp2<r)
 70         {
 71             ++temp2;
 72             ++tong[mx[temp2]-temp2+N];
 73         }
 74         while(mx[temp1]<mx[i]&&temp1<=r)
 75         {
 76             --tong[mx[temp1]-temp1+N];
 77             ++temp1;
 78         }
 79         if(temp1>r)
 80             break;
 81         //printf("i=%d temp1=%d temp2=%d jishu=%d\n",i,temp1,temp2,jishu);
 82         if(temp1<=temp2)
 83         {
 84             //printf("jishu1=%d\n",jishu);
 85             ans+=tong[mn[i]-i+N];
 86         }
 87     }
 88     //mem(tong,0);
 89     for(int i=mid-1;i<=r+1;++i)
 90         tong[mx[i]-i+N]=0;
 91     // max | min
 92     //printf("now_is_left_max_right_min\n");
 93     temp1=mid;temp2=mid+1;
 94     for(int i=mid+1;i<=r;++i)
 95     {
 96         while(mn[temp2-1]>mn[i]&&temp2>l)
 97         {
 98             --temp2;
 99             ++tong[mx[temp2]+temp2];
100         }
101         while(mx[temp1]<mx[i]&&temp1>=l)
102         {
103             --tong[mx[temp1]+temp1];
104             --temp1;
105         }
106         if(temp1<l)
107             break;
108         //printf("i=%d temp1=%d temp2=%d jishu=%d\n",i,temp1,temp2,jishu);
109         if(temp2<=temp1)
110         {
111             //printf("jishu2=%d\n",jishu);
112             ans+=tong[mn[i]+i];
113         }
114     }
115     //mem(tong,0);
116     for(int i=l-1;i<=mid+1;++i)
117         tong[mx[i]+i]=0;
118     //printf("ans=%d\n",ans);
119     return ans;
120 }
121
122 int main(){
123
124     //freopen("1.txt","r",stdin);
125     //freopen("raid9.in","r",stdin);
126
127     scanf("%d",&n);
128     for(int i=1;i<=n;++i)
129     {
130         scanf("%d%d",&u,&o);
131         a[u]=o;
132     }
133     cout<<get(1,n);
134 }

100

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 using namespace std;
 5 inline void judge(){
 6     freopen("raid.in","r",stdin);
 7     freopen("raid.out","w",stdout);
 8 }
 9 struct info{
10     int x,num;
11     info operator +(info b){
12         if(x<b.x)return *this;
13         if(x>b.x)return b;
14         return (info){x,num+b.num};
15     }
16     info operator +(int b){
17         return (info){x+b,num};
18     }
19 }v[200005];
20 int tag[200005];
21 void build(int u,int l,int r){
22     if(l==r){
23         v[u]=(info){0,1};
24         return;
25     }
26     int mid=l+((r-l)>>1);
27     build(u<<1,l,mid);
28     build((u<<1)|1,mid+1,r);
29     v[u]=v[u<<1]+v[(u<<1)|1];
30 }
31 inline void add(int u,int l,int r,int L,int R,int k){
32     if(L<=l&&r<=R){
33         tag[u]+=k;
34         v[u].x+=k;
35         return;
36     }
37     int mid=l+((r-l)>>1);
38     if(R<=mid)add(u<<1,l,mid,L,R,k);
39     else if(L>mid)add((u<<1)|1,mid+1,r,L,R,k);
40     else add(u<<1,l,mid,L,R,k),add((u<<1)|1,mid+1,r,L,R,k);
41     v[u]=v[u<<1]+v[(u<<1)|1]+tag[u];
42 }
43 info query(int u,int l,int r,int L,int R){
44     if(L<=l&&r<=R)return v[u];
45     int mid=l+((r-l)>>1);
46     if(R<=mid)return query(u<<1,l,mid,L,R)+tag[u];
47     else if(L>mid)return query((u<<1)|1,mid+1,r,L,R)+tag[u];
48     else return query(u<<1,l,mid,L,R)+query((u<<1)|1,mid+1,r,L,R)+tag[u];
49 }
50 int a[50005],q0[50005],q1[50005];
51 int main(){
52     judge();
53     int n;
54     scanf("%d",&n);
55     for(int i=1;i<=n;i++){
56         int x,y;
57         scanf("%d%d",&x,&y);
58         a[x]=y;
59     }
60     build(1,1,n);
61     int t0=0,t1=0;
62     q0[0]=q1[0]=0;
63     info ans=(info){0,0};
64     for(int i=1;i<=n;i++){
65         while(t0&&a[q0[t0]]<a[i]){
66             add(1,1,n,q0[t0-1]+1,q0[t0],-a[q0[t0]]);
67             t0--;
68         }
69         while(t1&&a[q1[t1]]>a[i]){
70             add(1,1,n,q1[t1-1]+1,q1[t1],a[q1[t1]]);
71             t1--;
72         }
73         add(1,1,n,q0[t0]+1,i,a[i]); q0[++t0]=i;
74         add(1,1,n,q1[t1]+1,i,-a[i]); q1[++t1]=i;
75         ans=ans+query(1,1,n,1,i);
76     /*    printf("-------%d--------\n",i);
77         printf("%d\n",t0);
78         for(int i=1;i<=t0;i++)printf("%d ",i); puts("");
79         printf("%d\n",t1);
80         for(int i=1;i<=t1;i++)printf("%d ",i); puts("");
81         printf("%d\n",ans.num);
82     */
83         add(1,1,n,1,i,-1);
84     }
85     printf("%d\n",ans.num);
86     return 0;
87 }

std 线段树

时间: 2024-10-14 11:40:15

2017.9.5 考试的相关文章

2017年精算师考试准考证打印入口及流程

2017年精算师考试将在10月28日至24日进行,距离精算师考试时间还是有28天.由于考试时间即将来临,在考试临近的时候,考生们最关心的问题就是精算师考试准考证打印的相关问题,今天小编就来告诉大家探讨一下. 相信还有大部分考生还不清楚精算师考试准考证打印入口在哪里,其实考生们只需要在网上直接进入中国精算师协会官网,就可以打印准考证了. 当然对于很多第一次报名参加精算师考试的考生来说,对于这一块没有什么经验,所以为大家梳理了一下精算师考试准考证打印的具体流程,以供大家参考. 1.请报名成功的考生在

【临时重发】复旦大学 在职软件工程硕士(双证)2017年入学考试 参考书推荐

[临时重发]复旦大学 在职软件工程硕士(双证)2017年入学考试 参考书推荐 2017-06-04 MSE热线 复旦MSE热线 (一)统考科目:(除了政治时政版(现在还没有),不一定要所谓2018版) 政治理论 (1)<全国硕士研究生招生考试 思想政治理论 考试大纲>,教育部考试中心,高等教育出版社,10元. (2)<全国硕士研究生招生考试 思想政治理论 考试大纲解析>,教育部考试中心,高等教育出版社,59元. 英语(二) (1)<全国硕士研究生招生考试 英语(二) 考试大纲

PAT(甲级)2017年秋季考试

PAT(甲级)2017年秋季考试 还有一题由于上午心情复杂..没调试完.待补. A Cut Integer 模拟题 #include<bits/stdc++.h> using namespace std; typedef long long ll; int n; int getLen(ll x){ int len = 0; while(x){ len++; x/=10; } return len; } int main(){ cin>>n; while(n--){ ll x; ci

PAT(甲级)2017年春季考试

PAT(甲级)2017年春季考试 C题图论欧拉回路,还没写,因为太饿了,待补 A.Raffle for Weibo Followers #include<bits/stdc++.h> using namespace std; int m,n,s; vector<string> person; set<string> se; vector<string> ans; int main(){ cin>>m>>n>>s; for(

2017/8/4 考试吐槽

2017 8 4 得分:110 一句话:江南皮革厂倒闭了!会的东西全带着他们的小姨子跑了!成绩统统二十分!统统二十分! A.聪明的质检员 链接:http://cogs.pro/cogs/problem/problem.php?pid=631 题意:找到一个式子:Y_i = \sum_j 1 \times \sum_j v_j ,  j \in [L_i, R_i] \text{且} w_j \ge W, j \text{是矿石编号}与标准差绝对值最小的情况. 吐槽:二分写成三分--少写一个库--

2017/8/7 考试吐槽

2017 8 7 得分:50 果然科学定律是不能够违背的--前几天,人品大爆发,考的还像那么回事,但是,带来的副作用是:RP 暴跌--真正需要人品的时候,已经掉光了--我又有什么办法呢--联考挂飞,这就是你! A.Passward 不要吐槽这个拼写--原题如此-- 题面--还是别贴了,找不到啊--直接重述题意+贴相似题目:找出最长的前后缀公共部分,并且这个东西在中间出现过.http://cogs.pro/cogs/problem/problem.php?pid=2688不同的是只有一组数据. 考

2017/8/12 考试吐槽

2017 8 12 得分:200 我只能说一句话:这才是$NOIP$难度吧--(神$TM$联赛考$FFT$) A.灌水 题意:$n$根板子长度是$1~n$全排列,找出一种方法,使得板子组成的容器容量恰好为定值. 眼瞪十分钟$+$$coding$ $15$分钟 $+$ $debug$ $5$分钟 $=$ $AC$. 首先我们可以知道,整个容器容量最大的情况就是两根最长的板子夹在两边,中间全是相对较短的板子,这样获得的最大的容量就是\[\frac{(n - 2)(n- 1)}{2 }\].那么我们就

2017/8/2 考试吐槽

2017 8 2 得分:70 首先扯点题外话:之前那么多天考试从来不公开吐槽,主要是因为每天都有我们的学长出的题,涉及到了他们的知识产权,我不方便发出来.但是今天!没有!全是原题!因此我要向全世界吐槽一发!让全世界感受到我的蒟蒻!(滑(fa)稽(gi))好了不废话了,现在进入正题:吐槽+题解-- 一句话:代码长度与正确性一定成反比! A.路面修整 吐槽:果然是我太弱了,这个东西都想不出来-- 链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1

2017/8/9 考试吐槽

2017 8 9 得分:70 感觉现在自己最弱的地方不是在于思维活性上,而是在于那些本不应该出现在我身上的问题,比如说什么看出正解打不出来啦.打出正解莫名其妙被卡分啦.莫名其妙少些什么导致爆零啦.读不懂题啦.读不懂题啦.读不懂题啦--反正问题太多了-- A.calc 题意:求出所有顺序对的贡献,定义顺序对贡献为这两个数之间比前者大比后者小数的个数. 一眼瞪出这个东西是用求逆序对的方法搞,但是1.这个东西肯定不是归并排序搞得出来的,2.我不会树状数组求逆序对--欢声笑语中打出$GG$-- 实际上也

2017/8/13 考试吐槽

2017 8 13 得分:160 联考最后一天--因为不会对拍日常爆炸-- A.最长上升子串 题意:给出一个序列,允许修改一次元素,求出这个序列最长子串. 这个玩意我刚开始以为是个线性$DP$,然后--细节巨多,写出来之后出一个数据卡一个-- 慌得我直喝水直上厕所--然后转到第$8$趟的时候,由于厕所比我在的那个窝风角落凉快,我的脑子算是冷静了下来,仔细一想,卧槽这不是$DP$!我可以先正序求出以每个元素开头子串长度,再倒序求出每个元素结尾子串长度,之后枚举修改位置,检查修改效果!$mdzz$-