CUGBACM Codeforces Tranning 3 题解
链接:http://acm.hust.edu.cn/vjudge/contest/view.action?
cid=62515#overview
描写叙述:第三场CF训练了。这次做的挺搞笑的,我记得这是内天持续训练九个小时中的最后两个小时,想想也是蛮拼的。
题解:
题意:给四个边。假设能组成推断能不能从当中找三条边组成三角形,不就再推断能不能三条边首尾相接组成一个线段。
思路:三角形推断条件,两条边之和大于第三条边。两边之和等于第三条边就是线段。
代码:
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <ctype.h>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
#define eps 1e-8
#define INF 0x7fffffff
#define maxn 10005
#define PI acos(-1.0)
#define seed 31//131,1313
#define LOCAL
typedef long long LL;
typedef unsigned long long ULL;
using namespace std;
int main()
{
int a[5];
for(int i=0;i<4;i++)
scanf("%d",&a[i]);
sort(a,a+4);
if(a[0]+a[1]>a[2]||a[1]+a[2]>a[3])
puts("TRIANGLE");
else if(a[0]+a[1]==a[2]||a[1]+a[2]==a[3]||a[0]+a[2]==a[3])
puts("SEGMENT");
else puts("IMPOSSIBLE");
return 0;
}
题意:两个人,一个从左边開始吃巧克力,一个右边開始吃巧克力。两个人吃的速度是一样的。假设两人同一时候開始吃同一块巧克力,右边人放弃。问两边人各吃多少个巧克力。
思路:记每一个个每一个巧克力吃的时间。比一下即可。
代码:
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <ctype.h>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
#define eps 1e-8
#define INF 0x7fffffff
#define maxn 10005
#define PI acos(-1.0)
#define seed 31//131,1313
#define LOCAL
typedef long long LL;
typedef unsigned long long ULL;
using namespace std;
int main()
{
int tot;
scanf("%d",&tot);
int aa[100005];
int l[100005],r[100005];
int sum = 0;
l[0]=0;
for(int i=0;i<tot;i++)
{
scanf("%d",&aa[i]);
}
for(int i=1;i<tot;i++)
l[i]=l[i-1]+aa[i-1];
r[tot-1]=0;
for(int i=tot-2;i>=0;i--)
r[i]=r[i+1]+aa[i+1];
int Alice = 0,Bob = 0;
for(int i=0;i<tot;i++)
{
if(l[i]<=r[i])
Alice++;
else Bob++;
}
cout<<Alice<<" "<<Bob<<endl;
}
题意:给一个n*m的图,里面用大写字母表示桌子,找到和给出的字母相邻的字母的种类数之和。
思路:对于每一个存在的字母找一下上,下,左,右就可以。
代码:
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <ctype.h>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
#define eps 1e-8
#define INF 0x7fffffff
#define maxn 10005
#define PI acos(-1.0)
#define seed 31//131,1313
#define LOCAL
typedef long long LL;
typedef unsigned long long ULL;
using namespace std;
char ss[105][105];
bool vis[60];
int main()
{
int row,col;
char cap[5];
scanf("%d%d%s",&row,&col,cap);
for(int i=0;i<row;i++)
scanf("%s",ss[i]);
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
if(ss[i][j]==cap[0])
{
if(i>0)
if(ss[i-1][j]!=cap[0]&&ss[i-1][j]>='A')
vis[ss[i-1][j]-'A']=1;
if(j>0)
if(ss[i][j-1]!=cap[0]&&ss[i][j-1]>='A')
vis[ss[i][j-1]-'A']=1;
if(i<row)
if(ss[i+1][j]!=cap[0]&&ss[i+1][j]>='A')
vis[ss[i+1][j]-'A']=1;
if(j<col)
if(ss[i][j+1]!=cap[0]&&ss[i][j+1]>='A')
vis[ss[i][j+1]-'A']=1;
}
}
}
int ans = 0;
for(int i=0;i<26;i++)
if(vis[i])
ans++;
printf("%d\n",ans);
return 0;
}
D.Longest Regular Bracket Sequence
题意:给一个长的字符串,当中都是"("和")",问最长的合理括号匹配子串是多长。而且找出该长度的子串有多少个。
思路:比赛的时候,了。
是写DP搞了好久都搞不出来,加上脑子糊里糊涂的。就GG了。思路是这种,对于每一个")",假设它左边的是合理的匹配,而且找到它左边的合理匹配的第一个"("的左端也是"(",那么它的匹配数是左边的匹配数+2,即dp[i]=dp[i-1]+2,而且假设找到的合理匹配的左端还存在合理匹配,那么它的合理匹配长度还要加上前面合理匹配的长度。
代码:
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <ctype.h>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
#define eps 1e-8
#define INF 0x7fffffff
#define maxn 10005
#define PI acos(-1.0)
#define seed 31//131,1313
#define LOCAL
typedef long long LL;
typedef unsigned long long ULL;
using namespace std;
int dp[1000005];
char ss[1000005];
int main()
{
int i , time = 1,ans = 0;
scanf("%s",ss);
memset(dp,0,sizeof(dp));
for(i=1; ss[i]!='\0'; i++)
{
if(i-dp[i-1]-1>=0&&ss[i]==')'&&ss[i-dp[i-1]-1]=='(')
{
dp[i]=dp[i-1]+2;
if(i-dp[i-1]-2>=0)
dp[i]+=dp[i-dp[i-1]-2];
}
if(dp[i]>ans)
{
ans = dp[i];
time = 1;
}
else if(dp[i]==ans&&ans!=0)
{
time++;
}
}
printf("%d %d\n",ans,time);
}
E. cid=62515#problem/E" style="color:blue; text-decoration:none; font-family:Verdana; font-size:14.44444465637207px; line-height:20px; background-color:rgb(226,228,255)">Exposition
题意:给出N本书,n<=10^5,这n本书按出版时间给出的,给出了每本书的高度hi。而且给出一个k。k<=10^6,要求在n本书选择当中连续的若干本书。当中最高的高度比最高的高度不能大于k,问最多能够选择多少本书。
思路:二分+RMQ。
从左至右依次选择每本书作为起点,二分来选择符合条件的终点来保证以该本书为起点的长度最长,对于每次的终点,找到起点终点之间的最高高度和最低高度。假设符合条件,那么终点右移,否则终点左移。查询最高高度和最低高度的方式是ST表,O(NlogN)的预处理,然后O(1)的查询,二分的过程中的复杂度也是O(NlogN)。
代码:
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <ctype.h>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
#define eps 1e-8
#define INF 0x7fffffff
#define maxn 100005
#define PI acos(-1.0)
#define seed 31//131,1313
#define LOCAL
typedef long long LL;
typedef unsigned long long ULL;
using namespace std;
int stTable_min[maxn][32],stTable_max[maxn][32];
int preLog2[maxn];
int h[maxn];
int Left[maxn],Right[maxn];
int ans = 0,times = 0;
void st_prepare(int n,int *array)
{
preLog2[1]=0;
for(int i=2; i<=n; i++)
{
preLog2[i]=preLog2[i-1];
if((1<<preLog2[i]+1)==i)
preLog2[i]++;
}
for(int i=n-1; i>=0; i--)
{
stTable_min[i][0]=array[i];
stTable_max[i][0]=array[i];
for(int j=1; (i+(1<<j)-1)<n; j++)
{
stTable_min[i][j]=min(stTable_min[i][j-1],stTable_min[i+(1<<j-1)][j-1]);
stTable_max[i][j]=max(stTable_max[i][j-1],stTable_max[i+(1<<j-1)][j-1]);
}
}
return ;
}
int query_sub(int l,int r)
{
int len=r-l+1,k=preLog2[len];
return max(stTable_max[l][k],stTable_max[r-(1<<k)+1][k])-min(stTable_min[l][k],stTable_min[r-(1<<k)+1][k]);
}
int main()
{
int all = 0;
int tot,k;
scanf("%d%d",&tot,&k);
for(int i=0;i<tot;i++)
scanf("%d",&h[i]);
st_prepare(tot,h);
for(int i=0;i<tot;i++)
{
int l = i , r = tot;
while(r>l+1)
{
int mid = (l + r) / 2;
if(query_sub(i,mid)>k)
r=mid;
else l=mid;
}
if(l-i+1>ans)
{
ans=l-i+1;
times=1;
Left[0]=i;
Right[0]=l;
}
else if(l-i+1==ans)
{
Left[times]=i;
Right[times++]=l;
}
}
printf("%d %d\n",ans,times);
for(int i=0;i<times;i++)
printf("%d %d\n",Left[i]+1,Right[i]+1);
return 0;
}
CUGBACM Codeforces Tranning 3 题解的更多相关文章
- CUGBACM Codeforces Tranning 1 题解
链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=61581#overview 描写叙述:非常老的CF题,题不错,拿来训练正好. 做的时 ...
- Codeforces Round #556 题解
Codeforces Round #556 题解 Div.2 A Stock Arbitraging 傻逼题 Div.2 B Tiling Challenge 傻逼题 Div.1 A Prefix S ...
- Codeforces Round #569 题解
Codeforces Round #569 题解 CF1179A Valeriy and Deque 有一个双端队列,每次取队首两个值,将较小值移动到队尾,较大值位置不变.多组询问求第\(m\)次操作 ...
- Codeforces Round #557 题解【更完了】
Codeforces Round #557 题解 掉分快乐 CF1161A Hide and Seek Alice和Bob在玩捉♂迷♂藏,有\(n\)个格子,Bob会检查\(k\)次,第\(i\)次检 ...
- CFEducational Codeforces Round 66题解报告
CFEducational Codeforces Round 66题解报告 感觉丧失了唯一一次能在CF上超过wqy的机会QAQ A 不管 B 不能直接累计乘法打\(tag\),要直接跳 C 考虑二分第 ...
- codeforces CF475 ABC 题解
Bayan 2015 Contest Warm Up http://codeforces.com/contest/475 A - Bayan Bus B - Strongly Connected Ci ...
- Codeforces Round #542 题解
Codeforces Round #542 abstract I决策中的独立性, II联通块染色板子 IIIVoronoi diagram O(N^2 logN) VI环上距离分类讨论加取模,最值中的 ...
- Codeforces Choosing Laptop 题解
这题实在是太水了,具体看注释 蒟蒻的方法是一边找过时的电脑一边比大小 蒟蒻不才,只会C++ 其实还会free basic,但它已经过时了 附: 本题洛谷网址 Codeforces网址 希望蒟蒻的题解能 ...
- Codeforces 381 简要题解
做的太糟糕了...第一题看成两人都取最优策略,写了个n^2的dp,还好pre-test良心(感觉TC和CF的pretest还是很靠谱的),让我反复过不去,仔细看题原来是取两边最大的啊!!!前30分钟就 ...
随机推荐
- Code First 数据库的表中属性的配置
数据类型的约定配置 默认规则 列的数据类型是由数据库决定的,SqlServer的默认规则如下 String: nvarchar(MAX) Int:int Bool:bit Decimal:deci ...
- python接口自动化9-https请求(SSL)
前言 本来最新的requests库V2.13.0是支持https请求的,但是一般写脚本时候,我们会用抓包工具fiddler,这时候会报:requests.exceptions.SSLError: [S ...
- nsq多播分发和负载均衡实验
什么是nsq?请参考实时分布式消息平台nsq. 本地如何搭建nsq?请参考本地搭建nsq经验分享. 从NSQ的设计文档中得知,单个nsqd被设计为一次能够处理多个流数据,NSQ中的数据流模型是由str ...
- Ubuntu删除文件夹的命令
1. 删除文件夹的内容包括文件夹: rm -rf 文件夹的名字 (-r 是 循环的意思, f是不询问的意思) 2 .删除文件夹的内容不包括文件夹: rm -rf 文件夹的名字/* ...
- C++ Primer 学习笔记_91_用于大型程序的工具 --命名空间
用于大型程序的工具 --命名空间 引言: 在一个给定作用域中定义的每一个名字在该作用域中必须是唯一的,对庞大.复杂的应用程序而言,这个要求可能难以满足.这样的应用程序的全局作用域中一般有很多名字定义. ...
- Spark RDD API扩展开发
原文链接: Spark RDD API扩展开发(1) Spark RDD API扩展开发(2):自定义RDD 我们都知道,Apache Spark内置了很多操作数据的API.但是很多时候,当我们在现实 ...
- 一个table插件,用于bootstrap开发
最近项目中改用bootstrap,可以给的通用table,写的有点死,id名称是固定的,那一个页面两个table如何做呢? ok,模仿着别人的代码,写了一个,整体代码如下: ; (function(f ...
- JAVA Selenium PHONCOMJS 获取js动态生成完整网页
首先需要在maven的pom.xml中包含以下依赖 <dependency> <groupId>com.github.detro</groupId> <art ...
- 自定义ImageView 手势 缩放 滑动 矩阵
功能 初始时大小控制,图片宽或高大于view的,缩小至view大小,否则按原始大小显示双击放大,第一次双击后将图片宽或高放大到view的宽或高的比例再次双击会再在此前基础上放大固定的倍数放大两次后后再 ...
- java后台与jsp前台特殊字符处理(字符串编码与解码)
在后台与前台数据交互时如果有特殊字符就很容易出现问题,所以就需要对字符串进行编码传输,在获取后再进行解码: 1.Java后台进行编码与解码 URLEncoder.encode(str,"ut ...