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 ...
随机推荐
- Mybash的实现
Mybash的实现 要求: 使用fork,exec,wait实现mybash 写出伪代码,产品代码和测试代码 发表知识理解,实现过程和问题解决的博客(包含代码托管链接) 背景知识 1. fork 使用 ...
- UWP 页面间传递参数(常见类型string、int以及自定义类型)
这是一篇很基础的,大佬就不要看了,也不要喷,谢谢
- 解决vue2.0路由 TypeError: Cannot read property 'matched' of undefined 的错误问题
刚开始使用vue-router2.0,虽然也用了vux,用起来却发现一个问题--具体如下: 正常情况下使用脚手架跑完之后,然后修改源项目,首先在main.js入口里把该import进去的vuex,vu ...
- JS 转换数据类型
JavaScript 是一种动态数据类型语言,变量是没有类型的,可以随机赋予任意值,若变量要转换数据类型,有两种办法:隐式转换和显式转换. 隐式转换可转换为字符串(将一个值加上字符串) 数字(在值的前 ...
- python 字符串和字典
一.字符串操作 name = "my name is \t {name} and i am {year} years old" 1.首字母大写 print(name.capital ...
- Spring Cache扩展:注解失效时间+主动刷新缓存(二)
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- Angular组件——父组件调用子组件方法
viewChild装饰器. 父组件的模版和控制器里调用子组件的API. 1.创建一个子组件child1里面只有一个greeting方法供父组件调用. import { Component, OnIni ...
- python中的赋值与深浅拷贝
Python当中对于拷贝,分为两种类型.一种是数字和字符串,另一种就是列表.元组.字典等其他类型了. 一.数字和字符串的拷贝 1.赋值 举个栗子: a1 = 123123 a2 = 123123 # ...
- Linux知识积累(4) Linux下chkconfig命令详解
Linux下chkconfig命令详解 chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. ...
- Object.defineProperties()和Object.defineProperty()方法
Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象. 语法:Object.defineProperty(obj, pro ...