Codeforces Beta Round #5

Codeforces Beta Round #5

http://codeforces.com/contest/5

A

模拟题

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define lson l,mid,rt<<1
 4 #define rson mid+1,r,rt<<1|1
 5 #define sqr(x) ((x)*(x))
 6 typedef long long ll;
 7 /*#ifndef ONLINE_JUDGE
 8         freopen("1.txt","r",stdin);
 9 #endif */
10
11
12 int main(){
13     std::ios::sync_with_stdio(false);
14     #ifndef ONLINE_JUDGE
15         freopen("1.txt","r",stdin);
16     #endif
17     set<string>se;
18     string str;
19     int i;
20     int ans=0;
21     while(getline(cin,str)){
22         if(str.length()==0) break;
23         if(str[0]==‘+‘||str[0]==‘-‘){
24             if(str[0]==‘+‘){
25                 str=str.substr(1);
26                 se.insert(str);
27             }
28             else{
29                 str=str.substr(1);
30                 se.erase(str);
31             }
32         }
33         else{
34             for(i=0;i<str.length();i++){
35                 if(str[i]==‘:‘) break;
36             }
37            // cout<<i<<endl;
38             ans+=se.size()*(str.length()-1-i);
39         }
40     }
41     cout<<ans<<endl;
42     return 0;
43 }

B

画图题

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define lson l,mid,rt<<1
 4 #define rson mid+1,r,rt<<1|1
 5 #define sqr(x) ((x)*(x))
 6 typedef long long ll;
 7 /*#ifndef ONLINE_JUDGE
 8         freopen("1.txt","r",stdin);
 9 #endif */
10 string str[1005];
11
12 int main(){
13     std::ios::sync_with_stdio(false);
14     #ifndef ONLINE_JUDGE
15         freopen("1.txt","r",stdin);
16     #endif
17     int n=0;
18     while(getline(cin,str[n++]));
19     int Max=0;
20     n--;
21     for(int i=0;i<n;i++){
22         int len=str[i].length();
23         Max=max(Max,len);
24     }
25     for(int i=0;i<Max+2;i++){
26         cout<<‘*‘;
27     }
28     cout<<endl;
29     int cc=1;
30     for(int i=0;i<n;i++){
31         cout<<‘*‘;
32         int k=Max-str[i].length();
33         int tou=k/2;
34         int wei=k/2;
35         k=k-wei-tou;
36         if(k){
37             if(cc%2) wei++,cc++;
38             else tou++,cc++;
39         }
40         for(int j=0;j<tou;j++) cout<<‘ ‘;
41         cout<<str[i];
42         for(int j=0;j<wei;j++) cout<<‘ ‘;
43         cout<<‘*‘<<endl;
44     }
45     for(int i=0;i<Max+2;i++){
46         cout<<‘*‘;
47     }
48     cout<<endl;
49     return 0;
50 }

C

找到匹配最大字符串,直接暴力模拟

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define lson l,mid,rt<<1
 4 #define rson mid+1,r,rt<<1|1
 5 #define sqr(x) ((x)*(x))
 6 typedef long long ll;
 7 /*#ifndef ONLINE_JUDGE
 8         freopen("1.txt","r",stdin);
 9 #endif */
10
11 int a[1000005];
12 int len[1000005];
13
14 int main(){
15     std::ios::sync_with_stdio(false);
16     #ifndef ONLINE_JUDGE
17         freopen("1.txt","r",stdin);
18     #endif
19     string str;
20     cin>>str;
21     stack<int>st;
22     /// () (()) ()
23     memset(a,-1,sizeof(a));
24     for(int i=0;i<str.length();i++){
25         if(str[i]==‘(‘){
26             st.push(i);
27         }
28         else{
29             if(st.empty()){
30                 continue;
31             }
32             else{
33                 a[i]=st.top();
34                 st.pop();
35             }
36         }
37     }
38     int Max=0,num=0;
39     for(int i=0;i<str.length();i++){
40         if(a[i]!=-1){
41             len[i]=(a[i]>0?len[a[i]-1]:0)+i-a[i]+1;
42             if(Max<len[i]){
43                 Max=len[i];
44                 num=1;
45             }
46             else if(Max==len[i]) num++;
47         }
48     }
49
50
51     if(!Max) cout<<"0 1"<<endl;
52     else{
53         cout<<Max<<" "<<num<<endl;
54     }
55     return 0;
56 }

D

物理题

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define lson l,mid,rt<<1
 4 #define rson mid+1,r,rt<<1|1
 5 #define sqr(x) ((x)*(x))
 6 typedef long long ll;
 7 /*#ifndef ONLINE_JUDGE
 8         freopen("1.txt","r",stdin);
 9 #endif */
10 double a,v,l,d,w,ans,t1,t2,t3,x1,x2,x3;
11 int flag;
12
13 int main(){
14     scanf("%lf%lf",&a,&v);
15     scanf("%lf%lf%lf",&l,&d,&w);
16     t1=v/a;
17     x1=a*t1*t1/2;
18     if(w<v)
19         flag=1;
20     if(flag==1){
21         t2=w/a;
22         x2=a*t2*t2/2;
23         if(x2<d){
24             t3=(v-w)/a;
25             x3=w*t3+a*t3*t3/2;
26             if(x1+x3<d)
27                 ans=t1+t3+(d-x1-x3)/v;
28             else
29                 ans=t2+2*(sqrt(a*(d-x2)+w*w)-w)/a;
30             if(x3<l-d)
31                 ans+=t3+(l-d-x3)/v;
32             else
33                 ans+=(sqrt(2*a*(l-d)+w*w)-w)/a;
34         }
35         else
36             flag=0;
37     }
38     if(flag==0){
39         if(x1<l)
40             ans=t1+(l-x1)/v;
41         else
42             ans=sqrt(2*l/a);
43     }
44     printf("%.6f\n",ans);
45     return 0;
46 }

E

首先我们把环变成一个链,然后用一个并查集的思想,处理每一座山左边第一个比这个山高的山是哪个,右边第一个比这个山高的是哪个,这个区域内和这个山高度一样的山有多少

然后跑一发并查集就好了

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define lson l,mid,rt<<1
 4 #define rson mid+1,r,rt<<1|1
 5 #define sqr(x) ((x)*(x))
 6 #define maxn 1000010
 7 typedef long long ll;
 8 /*#ifndef ONLINE_JUDGE
 9         freopen("1.txt","r",stdin);
10 #endif */
11
12 int a[maxn];
13 int b[maxn];
14 int l[maxn];
15 int r[maxn];
16 int k[maxn];
17 int main()
18 {
19     int n;
20     cin>>n;
21     int p=-1;
22     for(int i=0;i<n;i++)
23     {
24         cin>>a[i];
25         if(p==-1)
26             p=i;
27         else if(a[i]>a[p])
28         {
29             p=i;
30         }
31     }
32     for(int i=0;i<n;i++)
33         b[i]=a[(i+p+n)%n];
34     b[n]=a[p];
35     for(int i=1;i<n;i++)
36     {
37         l[i]=i-1;
38         while(l[i]>0&&b[i]>=b[l[i]])
39             l[i]=l[l[i]];
40     }
41     k[n]=0;
42     for(int i=n-1;i>=0;i--)
43     {
44         r[i]=i+1;
45         while(r[i]<n&&b[i]>b[r[i]])
46             r[i]=r[r[i]];
47         if(r[i]<n&&b[i]==b[r[i]])
48         {
49             k[i]=k[r[i]]+1;
50             r[i]=r[r[i]];
51         }
52     }
53     ll ans=0;
54     for(int i=1;i<n;i++)
55     {
56         ans+=k[i];
57         ans+=1;
58         if(l[i]!=0||r[i]!=n)
59             ans++;
60     }
61     cout<<ans<<endl;
62 }

原文地址:https://www.cnblogs.com/Fighting-sh/p/10347269.html

时间: 2024-10-12 20:52:10

Codeforces Beta Round #5的相关文章

Codeforces Beta Round #91 (Div. 1 Only) E. Lucky Array

E. Lucky Array Petya loves lucky numbers. Everybody knows that lucky numbers are positive integers whose decimal representation contains only the lucky digits 4 and 7. For example, numbers 47, 744, 4 are lucky and 5, 17, 467are not. Petya has an arra

Codeforces Beta Round #85 (Div. 1 Only) C (状态压缩或是数学?)

C. Petya and Spiders Little Petya loves training spiders. Petya has a board n × m in size. Each cell of the board initially has a spider sitting on it. After one second Petya chooses a certain action for each spider, and all of them humbly perform it

CodeForces Beta Round #1

Codeforces Beta Round #1 A. Theatre Square [题意]一个n*m的矩形广场,用a*a的方形石板铺设,问最少需要多少块石板能铺满广场. [思路]水题,从n方向来看能能够铺设ceil(n/a)块,从m方向来看能能够铺设ceil(m/a)块,总共有ceil(n/a)*ceil(m/a)块. 1 /* 2 ** CodeForces 1A Theatre Square 3 ** Created by Rayn @@ 2014/05/18 4 */ 5 #inclu

暴力/DP Codeforces Beta Round #22 (Div. 2 Only) B. Bargaining Table

题目传送门 1 /* 2 题意:求最大矩形(全0)的面积 3 暴力/dp:每对一个0查看它左下的最大矩形面积,更新ans 4 注意:是字符串,没用空格,好事多磨,WA了多少次才发现:( 5 详细解释:http://www.cnblogs.com/cszlg/p/3217478.html 6 */ 7 #include <cstdio> 8 #include <algorithm> 9 #include <cstring> 10 #include <cmath>

Codeforces Beta Round #6 (Div. 2 Only) B. President&#39;s Office

题目大意 给出一个n*m的矩阵 ,描述桌子的布局.总统的桌子和他的副手的桌子相邻,每一个人的桌子有它独有的颜色.问总统有多少个副手. 解题思路 搜出总统的桌子在矩阵中的边界后判断边界外的其它颜色桌子的数量. 题目代码 #include <set> #include <map> #include <queue> #include <math.h> #include <vector> #include <string> #include

图论/暴力 Codeforces Beta Round #94 (Div. 2 Only) B. Students and Shoelaces

题目传送门 1 /* 2 图论/暴力:这是个连通的问题,每一次把所有度数为1的砍掉,把连接的点再砍掉,总之很神奇,不懂:) 3 */ 4 #include <cstdio> 5 #include <cstring> 6 #include <algorithm> 7 #include <cmath> 8 using namespace std; 9 10 const int MAXN = 1e2 + 10; 11 const int INF = 0x3f3f3

Codeforces Beta Round #1 B. Spreadsheets

Codeblocks坏掉了,我不知道该怎么修,只能过两天重装系统了. 没办法.这个题是用Java写的,代码风格不好不要骂我~~ 题目大意: Excel表格那种坐标系统,和正常的坐标系统.用代码实现转换. 就是模拟题啊,代码量比较小. 下面是代码: import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); i

Codeforces Beta Round #1 C. Ancient Berland Circus

果然Java还是不靠谱啊,一个NaN把我整了半天~~ 题目大意: 有一个正多边形,给出任意三个顶点的坐标,求这个正多边形的最小面积. 解题思路: 首先要知道这三个顶点组成的三角形的外接圆一定是这个正多边形的外接圆. 用过计算出三角形的三边长,可以计算出三角型面积,进而推出外接圆半径. 可以得到三个圆心角,找出最大公约数,那就是最大角度. 就可以计算出多边形面积了~~ 下面是代码: import java.text.DecimalFormat; import java.util.Scanner;

codeforces Beta Round #19 D. Point (线段树 + set)

题目大意: 对平面上的点进行操作. add x y 在 (x,y )上加一个点. remove x y 移除 (x,y)上的点. find x y 求出在(x,y)右上角离他最近的点,优先级是靠左,靠下. 思路分析: find 操作 比较麻烦. 要保证x大的同时还要确保x最小,而且该x上还要有点. 这样要找大的时候要小的,就是在线段树上选择性的进入左子树还是右子树. 所以核心就是,用set维护叶子节点. 然后查找的时候去叶子节点找,如果这个叶子节点有蛮子的 x y  就输出,否则回溯去另外一个子

Codeforces Beta Round #12 D. Ball (线段树)

题目大意: n个女性中,如果有一个女性的三维比这个女性的三维都大,这个女性就要自杀.问要自杀多少个. 思路分析: 先按照第一维排序. 然后离散化第二维,用第二维的下标建树,树上的值是第三维,更新的时候取最大值. 注意是按照第一维度从大到小进入线段树. 而且还要严格递增. 所以处理第一维度比较大小的时候要分开处理,要把相同的先判断,再更新入树. 那么如何判断这个女性是否自杀. 首先,你知道第一维度是从大到小的,所以先进树了的节点的第一维度一定更大. 再次,我们考虑第二维度,我们去树上第二维度下标大