Educational Codeforces Round 18
A. New Bus Route
题目大意:给出n个不同的数,问差值最小的数有几对。(n<=200,000)
思路:排序一下,差值最小的一定是相邻的,直接统计即可。
#include<cstdio>
#include<algorithm>
using namespace std;
char B[<<],*S=B,C;int X,F;
inline int read()
{
for(F=;(C=*S++)<''||C>'';)if(C=='-')F=-;
for(X=C-'';(C=*S++)>=''&&C<='';)X=(X<<)+(X<<)+C-'';
return X*F;
}
#define MN 200000
int a[MN+];
int main()
{
fread(B,,<<,stdin);
int n=read(),i,mn=0x7FFFFFFF,cnt=;
for(i=;i<=n;++i)a[i]=read();
sort(a+,a+n+);
for(i=;i<n;++i)
{
a[i]=a[i+]-a[i];
if(a[i]<mn)mn=a[i],cnt=;
if(a[i]==mn)++cnt;
}
printf("%d %d",mn,cnt);
}
B. Counting-out Rhyme
题目大意:n个人站成一圈,一开始第1个人是首领,k次操作,每次首领向后数ai个人让那个人滚蛋并使这个人的后一个人变成首领,求每次谁滚蛋了。(1<=k<n<=100,ai<=10^9)
思路:ai对当前剩余人数取模后模拟。
#include<cstdio>
char B[<<],*S=B,C;int X;
inline int read()
{
while((C=*S++)<''||C>'');
for(X=C-'';(C=*S++)>=''&&C<='';)X=(X<<)+(X<<)+C-'';
return X;
}
#define MN 100
int u[MN+];
int main()
{
fread(B,,<<,stdin);
int n,k,i,x,s=;
n=read();k=read();
for(i=;i<k;++i)
{
for(x=read()%(n-i)+;x--;)while(u[++s>n?s=:s]);
u[s]=;printf("%d ",s);
}
}
C. Divide by Three
题目大意:给定一个长度为n的数字串,求一个最长的子序列满足没有前导0且是3的倍数。(n<=100,000)
思路:上过小学的都知道3的倍数各位数字和也是3的倍数。从后往前枚举哪个数字作为最后子序列的第一位数字,求出这个后缀各位之和模3的值,还有这一位后面有几个模3等1和模3等2的数,分情况判断即可。
#include<cstdio>
#include<cstring>
#define MN 100000
char s[MN+];
int main()
{
int n,i,f=,f1=,f2=,ans=-,p,pf1,pf2;
scanf("%s",s+);n=strlen(s+);
for(i=n;i;--i)
{
f=(f+(s[i]-=''))%;
if(s[i])
{
if(!f&&(ans<||i<=ans))ans=i-,p=i,pf1=pf2=;
if(f==&&f1&&(ans<||i<ans))ans=p=i,pf1=,pf2=;
if(f==&&f2>&&(ans<||i+<ans))ans=i+,p=i,pf1=,pf2=;
if(f==&&f2&&(ans<||i<ans))ans=p=i,pf1=,pf2=;
if(f==&&f1>&&(ans<||i+<ans))ans=i+,p=i,pf1=,pf2=;
}
else if(ans<)ans=-;
if(s[i]%==)++f1;
if(s[i]%==)++f2;
}
if(ans<-)return *puts("");
if(ans<)return *puts("-1");
for(printf("%d",s[i=p]);++i<=n;)
if(s[i]%==&&pf1)--pf1;
else if(s[i]%==&&pf2)--pf2;
else printf("%d",s[i]);
}
D. Paths in a Complete Binary Tree
题目大意:有一棵n个节点的满二叉树,节点标号为中序遍历,每次询问一个点,经过一串操作后在哪个点,操作有U,L,R,分别为走向父亲和左右儿子。(n<=10^18,操作总长<=10^5)
思路:我觉得转成先序遍历后再转回来比较直观,具体实现看下面的代码。
#include<cstdio>
#include<iostream>
using namespace std;
#define ll long long
#define MN 100000
char s[MN+];
ll find(ll x,ll n,ll k)
{
n>>=;
if(k<=n)return find(x<<,n,k);
if(k-=n+)return find(x<<|,n,k);
return x;
}
ll query(ll x,ll n)
{
int cnt=,a[];ll ans=;
while(x>)a[cnt++]=x&,x>>=;
while(cnt--){n>>=;if(a[cnt])ans+=n+;}
return ans++(n>>);
}
int main()
{
ll n,x;int q,i;
cin>>n>>q;
while(q--)
{
cin>>x;scanf("%s",s);
x=find(,n,x);
for(i=;s[i];++i)
{
if(s[i]=='U'&&x>)x>>=;
if(s[i]=='L'&&x<<<n)x<<=;
if(s[i]=='R'&&x<<<n)x=x<<|;
}
cout<<query(x,n)<<endl;
}
}
E. Colored Balls
题目大意:给出n个数ai,问把这些数字拆成若干个相差不超过1的数字最少拆几个。(n<=500,ai<=10^9)
思路:设最后全部拆成x和x-1,对于每个ai,符合条件的x满足x能整除ai或ai/x不小于x-1-ai%x,而对于每个ai,合法的x只有O(ai^0.5)种,枚举x<=ai^0.5,暴力check x,ai/x,ai/x-1,ai/x+1即可。复杂度O(n*ai^0.5)。
#include<cstdio>
#include<algorithm>
using namespace std;
#define MN 500
int n,a[MN+];
long long ans=1LL<<;
void cal(int x)
{
if(!x)return;
long long sum=;
for(int i=;i<=n;++i)
{
if(a[i]%x==||(a[i]/x>=x--a[i]%x))sum+=a[i]/x+bool(a[i]%x);
else return;
}
ans=min(ans,sum);
}
int main()
{
int i;
scanf("%d",&n);
for(i=;i<=n;++i)scanf("%d",&a[i]);
for(i=;i*i<=a[];++i)cal(i),cal(a[]/i),cal(a[]/i-),cal(a[]/i+);
printf("%I64d",ans);
}
Educational Codeforces Round 18的更多相关文章
- Educational Codeforces Round 18 D
Description T is a complete binary tree consisting of n vertices. It means that exactly one vertex i ...
- Educational Codeforces Round 18 B
Description n children are standing in a circle and playing the counting-out game. Children are numb ...
- Educational Codeforces Round 18 A
Description There are n cities situated along the main road of Berland. Cities are represented by th ...
- Educational Codeforces Round 18 C. Divide by Three DP
C. Divide by Three A positive integer number n is written on a blackboard. It consists of not more ...
- Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)
Problem Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec P ...
- Educational Codeforces Round 40 F. Runner's Problem
Educational Codeforces Round 40 F. Runner's Problem 题意: 给一个$ 3 * m \(的矩阵,问从\)(2,1)$ 出发 走到 \((2,m)\) ...
- [Educational Codeforces Round 16]E. Generate a String
[Educational Codeforces Round 16]E. Generate a String 试题描述 zscoder wants to generate an input file f ...
- [Educational Codeforces Round 16]D. Two Arithmetic Progressions
[Educational Codeforces Round 16]D. Two Arithmetic Progressions 试题描述 You are given two arithmetic pr ...
- [Educational Codeforces Round 16]C. Magic Odd Square
[Educational Codeforces Round 16]C. Magic Odd Square 试题描述 Find an n × n matrix with different number ...
随机推荐
- 在django模板中添加jquery
路径 /project_name /app_name /templates /index.html /project_name setting.py /static /js jquery.js 导入方 ...
- javabean 是什么?
JavaBean规范 Bean的中文含义是“豆子”,顾名思义,JavaBean是指一段特殊的Java类, 就是有默然构造方法,只有get,set的方法的java类的对象. 专业点解释是: JavaBe ...
- hp MSA50 5盘RAID5重建为4盘RAID5怎么恢复数据
[用户单位] XX省电视台[数据恢复故障描述] 一台HP 服务器,挂接一台HP MSA50磁盘阵列,内接5块1TB硬盘,原先结构为RAID5. 使用一段时间后,其中一块硬盘掉线,因RAID5支持一块硬 ...
- NFC驱动调试
1.NFC基本概念: NFC 又称为近场通信,是一种新兴技术,可以在彼此靠近的情况下进行数据交换,是由非接触式射频识别(RFID) 及互连互通技术整合演变而来,通过单一芯片集成感应式读卡器: NFC有 ...
- Web Api 过滤器之 ExceptionFilter 异常过滤器
一.服务器出现异常,会统一向客户端返回 500 的错误. [RoutePrefix("api/test")] public class TestController : ApiCo ...
- 使用HTML5视频事件示例
<!DOCTYPE html > <html > <head> <title>Video events example</title> &l ...
- VMware-vCenter-Server-Appliance VCSA升级步骤
1.下载ZIP升级文件并解压 2.打开HFS,把解压后的文件夹拖到"Virtual File System"下,在弹出的对话框中点击"Virtual folder&quo ...
- hibernate_exercise-many- to-one(1)
多对一关系 1.创建t_user表.t_group表 2.在eclipse中创建对应的实体类 package com.eneity; public class User { private int i ...
- mosquitto验证client互相踢
cleint11A订阅topic#################################################### server发送topic消息 ############### ...
- docker注意事项
当你最后投入容器的怀抱,发现它能解决很多问题,而且还具有众多的优点: 第一:它是不可变的 – 操作系统,库版本,配置,文件夹和应用都是一样的.您可以使用通过相同QA测试的镜像,使产品具有相同的表现 ...