A题:

题目地址:Lineland Mail

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <set>
#include <queue>
#include <stack>
#include <map>
using namespace std;
typedef long long LL;
const int inf=0x3f3f3f3f;
const double pi= acos(-1.0);
const double esp=1e-6;
const int maxn=1e5+10;
struct node
{
int id;
int value;
int Max;
int Min;
}q[maxn];
int cmp(struct node a,struct node b)
{
return a.value<b.value;
}
int cmp1(struct node a,struct node b)
{
return a.id<b.id;
}
int main()
{
int n,i;
while(~scanf("%d",&n)){
for(i=1;i<=n;i++){
scanf("%d",&q[i].value);
q[i].id=i;
q[q[i].id].Max=0;
q[q[i].id].Min=0;
}
sort(q+1,q+n+1,cmp);
for(i=1;i<=n;i++){
if(i==1){
q[i].Min=abs(q[1].value-q[2].value);
q[i].Max=abs(q[n].value-q[1].value);
}
else if(i==n){
q[i].Min=abs(q[n].value-q[n-1].value);
q[i].Max=abs(q[n].value-q[1].value);
}
else{
q[i].Min=min(abs(q[i].value-q[i-1].value),abs(q[i+1].value-q[i].value));
q[i].Max=max(abs(q[i].value-q[1].value),abs(q[n].value-q[i].value));
}
}
sort(q+1,q+1+n,cmp);
for(i=1;i<=n;i++){
printf("%d %d\n",q[i].Min,q[i].Max);
}
}
return 0;
}

B题:

题目地址:Berland National Library

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <set>
#include <queue>
#include <stack>
#include <map>
using namespace std;
typedef long long LL;
const int inf=0x3f3f3f3f;
const double pi= acos(-1.0);
const double esp=1e-6;
const int maxn=110;
const int maxn1=1e6+10;
char str[10];
int a;
int vis[maxn1];
int main()
{
int n;
int cnt1,cnt2;
while(~scanf("%d",&n)){
memset(vis,0,sizeof(vis));
cnt1=cnt2=0;
for(int i=0;i<n;i++){
scanf("%s %d",&str,&a);
if(str[0]=='+'){
cnt1++;
vis[a]=1;
cnt2=max(cnt1,cnt2);
}
else{
if(!vis[a]){
cnt2++;
}
else{
vis[a]=0;
cnt1--;
}
}
}
printf("%d\n",cnt2);
}
return 0;
}

C题:

题目地址:Geometric Progression

题意:求一个序列中形成以k为公比。项数为3的等比数列的种类数。

思路:在这里我用map开了一个dp[i][j]数组,记录长度为i的以j结尾的数字有多少种。所以我们非常easy得出dp[i][j]+=dp[i-1][j/k],dp[1][j]=1。由于我在程序中是用x%k维护的,所以要倒推。由于数据问题map不要开map

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <set>
#include <queue>
#include <stack>
#include <map>
using namespace std;
typedef long long LL;
const int inf=0x3f3f3f3f;
const double pi= acos(-1.0);
const double esp=1e-6;
const int maxn=200010;
LL a[maxn];
int main()
{
map<LL,LL> dp[4];
int n,k,i;
LL ans;
while(~scanf("%d %d",&n,&k)){
ans=0;
for(i=0;i<4;i++)
dp[i].clear();
for(i=1;i<=n;i++)
scanf("%lld",&a[i]);
for (i=1;i<=n;i++){
if(a[i]%k==0){
dp[3][a[i]]+=dp[2][a[i]/k];
dp[2][a[i]]+=dp[1][a[i]/k];
}
dp[1][a[i]]++;
}
map<LL,LL>::iterator it;
for (it=dp[3].begin();it!=dp[3].end();it++)
ans+=it->second;
printf("%lld\n",ans);
}
return 0;
}

D题:

题目地址:One-Dimensional Battle Ships

题意:给定一个区间。每次除去一个点,要求在剩下的空白里能放下。k个长为a的区间(a区间不能相离)。

假设能放下,则输出-1。否则的话输出在去处第几个点的时候不能放下。

思路:区间[l,r]每次去除一个点x,则当前剩下的区间为[l,x-1],[x+1,r]。然后找每一个区间能够放下的船数:(区间长度+1)/(船的长度+1){由于船和船之间相离,所以除以的是船的长度+1}。

二分答案去找第几个点让放的船数不足k。

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <set>
#include <queue>
#include <stack>
#include <map>
using namespace std;
typedef long long LL;
const int inf=0x3f3f3f3f;
const double pi= acos(-1.0);
const double esp=1e-6;
const int maxn=200010;
int x[maxn];
int x1[maxn];
int n,k,a,m;
int cnt;
int Find(int m)
{
for(int i=1;i<=m;i++)
x1[i]=x[i];
sort(x1+1,x1+m+1);
int len=0;
cnt=0;
for(int i=1;i<=m;i++){
cnt+=(x1[i]-len)/(a+1);
len=x1[i];
}
cnt+=(n+1-len)/(a+1);
if(cnt>=k)
return 1;
else
return 0;
}
int main()
{
scanf("%d %d %d",&n,&k,&a);
scanf("%d",&m);
for(int i=1;i<=m;i++)
scanf("%d",&x[i]);
int l=1,r=m;
int mid;
int res=inf;
while(l<=r){
mid=(l+r)>>1;
if(Find(mid)) l=mid+1;
else {r=mid-1;
res=min(res,mid);
}
}
//printf("mid==%d\n",mid);
//printf("L==%d\n",l);
if(l>m)
puts("-1");
else
printf("%d\n",res);
}

Codeforces Round #Pi (Div. 2)(A,B,C,D)的更多相关文章

  1. map Codeforces Round #Pi (Div. 2) C. Geometric Progression

    题目传送门 /* 题意:问选出3个数成等比数列有多少种选法 map:c1记录是第二个数或第三个数的选法,c2表示所有数字出现的次数.别人的代码很短,思维巧妙 */ /***************** ...

  2. 构造 Codeforces Round #Pi (Div. 2) B. Berland National Library

    题目传送门 /* 题意:给出一系列读者出行的记录,+表示一个读者进入,-表示一个读者离开,可能之前已经有读者在图书馆 构造:now记录当前图书馆人数,sz记录最小的容量,in数组标记进去的读者,分情况 ...

  3. Codeforces Round #Pi (Div. 2) D. One-Dimensional Battle Ships set乱搞

    D. One-Dimensional Battle ShipsTime Limit: 2 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/con ...

  4. Codeforces Round #Pi (Div. 2) C. Geometric Progression map

    C. Geometric Progression Time Limit: 2 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/5 ...

  5. Codeforces Round #Pi (Div. 2) B. Berland National Library set

    B. Berland National LibraryTime Limit: 2 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest ...

  6. Codeforces Round #Pi (Div. 2) A. Lineland Mail 水

    A. Lineland MailTime Limit: 2 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/567/proble ...

  7. Codeforces Round #Pi (Div. 2) E. President and Roads 最短路+桥

    题目链接: http://codeforces.com/contest/567/problem/E 题意: 给你一个带重边的图,求三类边: 在最短路构成的DAG图中,哪些边是必须经过的: 其他的(包括 ...

  8. Codeforces Round #Pi (Div. 2) E. President and Roads tarjan+最短路

    E. President and RoadsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/567 ...

  9. Codeforces Round #Pi (Div. 2) D. One-Dimensional Battle Ships set区间分解

    D. One-Dimensional Battle ShipsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/co ...

  10. Codeforces Round #Pi (Div. 2) B. Berland National Library 模拟

    B. Berland National LibraryTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contes ...

随机推荐

  1. jQuery操作radio、checkbox、select总结

    1.radio:单选框 HTML代码: <input type="radio" name="radio" id="radio1" va ...

  2. spark rdd Transformation和Action 剖析

    1.看到 这篇总结的这么好, 就悄悄的转过来,供学习 wordcount.toDebugString查看RDD的继承链条 所以广义的讲,对任何函数进行某一项操作都可以认为是一个算子,甚至包括求幂次,开 ...

  3. Ubuntu x86-64汇编(3) 数值操作指令

    指令标注 Operand Notation 指令instruction即运算operation, 操作的对象为一个或多个运算数operand, 使用不同的标记表示不同的约束 <reg>  ...

  4. rac安装_grid安装校验报错之grid未建立信任关系

    原创作品,出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明下面出处,否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlo ...

  5. linux shell 脚本攻略学习15--如何只列出目录,如何快速切换目录

    工作中经常遇到关于目录方面的问题,例如,如何只列出当前目录下的所有目录,以及如何快速高效的切换目录,而不需要使用鼠标,下面将简单介绍关于这两方面的解决方案: 一.如何只列出目录? 看似简单的任务,其实 ...

  6. Xcode 8 的 Debug 新特性 —- WWDC 2016 Session 410 & 412 学习笔记

    Contents OverView Static Analyzer Localizability Instance Cleanup Nullablility Runtime Issue View De ...

  7. angularJS实现无刷新文件下载

    $scope.getExcel = function () { $http.post("/production/statistics/export", { storeId: $sc ...

  8. ASP.NET车辆管理系统

    原文地址:https://blog.csdn.net/lisenyang/article/details/46606181 系统开发环境为VS2010,采用ASP.NET框架,数据库采用SQL Ser ...

  9. Mac XMPP Openfire 服务器配置

    前言 Openfire 是免费的.开源的.基于可拓展通讯和表示协议(XMPP).采用 Java 编程语言开发的实时协作服务器.Openfire 安装和使用都非常简单,并利用 Web 进行管理.单台服务 ...

  10. Postman 网络调试工具

    1.Postman 简介 Postman 是一款功能强大的网页调试与发送网页 HTTP 请求的工具.我们可以用来很方便的模拟 get 或者 post 或者其他方式的请求来调试接口. 官网下载地址 Po ...