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 ...
随机推荐
- socketpair创建双向通信的管道(全双工通信)
Linux下socketpair介绍: socketpair创建了一对无名的套接字描述符(只能在AF_UNIX域中使用),描述符存储于一个二元数组,例如sv[2] .这对套接字可以进行双工通信,每一个 ...
- 201621123043 《Java程序设计》第8周学习总结
1. 本周学习总结 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 contains的源代码如下 public boolean contain ...
- Python之旅.第三章.函数3.26
一.函数: 1.为什么要有函数?什么是函数? 1.组织结构不清晰,可读性差 2.代码冗余 3.管理维护的难度极大,扩展性 具备某一个功能的工具就是程序的中函数 事先准备工具的过程---->函数的 ...
- Java XML Dom解析工具
Java XML Dom解析工具 缩进等 transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); ...
- 剑指offer-反转单词顺序列
题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,"st ...
- tomca配置文件自动还原问题的解决 server.xml content.xml 等
当我们在处理中文乱码或是配置数据源时,我们要修改Tomcat下的server.xml和content.xml文件. 但是当我们修改完后重启Tomcat服务器时发现xml文件又被还原了,修改无效果. 为 ...
- mysql Access denied for user root@localhost错误解决方法
select * from user \G use mysql select * from user limit 1 \G update user set Host='%' where `User`= ...
- 一个适用于单页应用,返回原始滚动条位置的demo
如题,最近做一个项目时,由于页面太长,跳转后在返回又回到初始位置,不利于用户体验,需要每次返回到用户离开该页面是的位置.由于是移动端项目,使用了移动端的套ui框架framework7,本身框架的机制是 ...
- Web 项目报错No suitable driver found for jdbc:mysql://localhost:3306/book 的一个解决办法
确认jar包加入到了build path中,然后注意版本是否与数据库相配,还要留意将jar包放入WEB-INF下的lib文件夹中
- Java中如何实现j并发更新数据库同一条数据
分情况来说:普通单应用并发.多应用或多台服务器并发 情况一:普通单应用并发 使用关键字synchronized就可实现. 情况二:多应用或多台服务器并发 因多个应用之间并非同一个jvm(应用)内,因此 ...