【比赛链接】click here~~

A. Lala Land and Apple Trees:

【题意】:

AMR住在拉拉土地。

拉拉土地是一个很漂亮的国家,位于坐标线。拉拉土地是与著名的苹果树越来越随处可见。



拉拉土地恰好n苹果树。树数i位于位置xi和具有人工智能的苹果就能够了增长。阿姆鲁希望从苹果树收集苹果。 AMR眼下维持在X =0的位置。在開始的时候,他能够选择是否去左边或右边。他会在他的方向继续下去。直到他遇见一棵苹果树,他之前没有參观。他会採取全部的苹果。然后扭转他的方向。继续走这个方向,直到他遇到了还有一个苹果树,他之前没有參观等。

在换句话说,阿姆鲁訪问每个新的苹果树反转时他的方向。 AMR将停止收集苹果时,有没有很多其它的树木。他也没有在他所面对的方向參观。

求他能够收集的最大数量?

代码:

#ifndef _GLIBCXX_NO_ASSERT
#include <cassert>
#endif #include <cctype>
#include <cerrno>
#include <cfloat>
#include <ciso646>
#include <climits>
#include <clocale>
#include <cmath>
#include <csetjmp>
#include <csignal>
#include <cstdarg>
#include <cstddef>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime> #if __cplusplus >= 201103L
#include <ccomplex>
#include <cfenv>
#include <cinttypes>
#include <cstdalign>
#include <cstdbool>
#include <cstdint>
#include <ctgmath>
#include <cwchar>
#include <cwctype>
#endif // C++
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <typeinfo>
#include <utility>
#include <valarray>
#include <vector> #if __cplusplus >= 201103L
#include <array>
#include <atomic>
#include <chrono>
#include <condition_variable>
#include <forward_list>
#include <future>
#include <initializer_list>
#include <mutex>
#include <random>
#include <ratio>
#include <regex>
#include <scoped_allocator>
#include <system_error>
#include <thread>
#include <tuple>
#include <typeindex>
#include <type_traits>
#include <unordered_map>
#include <unordered_set>
#endif using namespace std;
#define rep(i,j,k) for(int i=(int)j;i<(int)k;++i)
#define per(i,j,k) for(int i=(int)j;i>(int)k;--i)
#define lowbit(a) a&-a
#define Max(a,b) a>b?a:b
#define Min(a,b) a>b?b:a
#define mem(a,b) memset(a,b,sizeof(a))
typedef long long LL;
typedef unsigned long long LLU;
typedef double db;
const int N=1e6+10;
int i,j,n,m,t,ans,res,cnt,tmp; char str[N];
bool vis[N];
int nx[N],ny[N]; int dir4[4][2]= {{1,0},{0,1},{-1,0},{0,-1}};
int dir8[8][2]= {{1,0},{1,1},{0,1},{-1,1},{-1,0},{-1,-1},{0,-1},{1,-1}}; struct node
{
int x,y;
}; vector< pair<int,int> >ll,rr; bool cmp1(pair<int ,int >a,pair <int ,int >b)
{
return a.first>b.first;
}
bool cmp2(pair<int ,int >a,pair <int ,int >b)
{
return a.first<b.first;
}
int main()
{
while(cin>>n)
{
int x,a;
rep(i,0,n)
{
cin>>x>>a;
if(x<0) ll.push_back(make_pair(x,a));
else rr.push_back(make_pair(x,a));
}
sort(ll.begin(),ll.end(),cmp1);
sort(rr.begin(),rr.end(),cmp2);
int res=0;
int lenl=ll.size(),lenr=rr.size();
if(lenl==lenr)
{
rep(i,0,lenl)
{
res+=ll[i].second;
res+=rr[i].second;
}
}
else if(lenl<lenr)
{
for(int i=0; i<lenl; ++i) res+=ll[i].second;
for(int i=0; i<=lenl; ++i) res+=rr[i].second;
}
else
{
for(int i=0; i<=lenr; ++i) res+=ll[i].second;
for(int i=0; i<lenr; ++i) res+=rr[i].second;
}
cout<<res<<endl;
}
return 0;
}

B. Amr and The Large Array

【题意】:

阿姆鲁得到了一个大阵大小为n的。AMR不喜欢大型阵列,所以他打算把它缩小。

AMR并不关心。除非它的漂亮阵列中的不论什么东西。阵列的美被定义为次一些数发生在此数组的最大数目。他想选择这个阵列。使得它的漂亮将是一样的原始数组中最小的子段。



帮助阿姆鲁通过选择最小的子段。

代码:

#ifndef _GLIBCXX_NO_ASSERT
#include <cassert>
#endif #include <cctype>
#include <cerrno>
#include <cfloat>
#include <ciso646>
#include <climits>
#include <clocale>
#include <cmath>
#include <csetjmp>
#include <csignal>
#include <cstdarg>
#include <cstddef>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime> #if __cplusplus >= 201103L
#include <ccomplex>
#include <cfenv>
#include <cinttypes>
#include <cstdalign>
#include <cstdbool>
#include <cstdint>
#include <ctgmath>
#include <cwchar>
#include <cwctype>
#endif // C++
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <typeinfo>
#include <utility>
#include <valarray>
#include <vector> #if __cplusplus >= 201103L
#include <array>
#include <atomic>
#include <chrono>
#include <condition_variable>
#include <forward_list>
#include <future>
#include <initializer_list>
#include <mutex>
#include <random>
#include <ratio>
#include <regex>
#include <scoped_allocator>
#include <system_error>
#include <thread>
#include <tuple>
#include <typeindex>
#include <type_traits>
#include <unordered_map>
#include <unordered_set>
#endif using namespace std;
#define rep(i,j,k) for(int i=(int)j;i<(int)k;++i)
#define per(i,j,k) for(int i=(int)j;i>(int)k;--i)
#define lowbit(a) a&-a
#define Max(a,b) a>b? a:b
#define Min(a,b) a>b?b:a
#define mem(a,b) memset(a,b,sizeof(a))
typedef long long LL;
typedef unsigned long long LLU;
typedef double db;
const int N=1e6+10;
int i,j,n,m,t,ans,res,cnt,tmp; char str[N];
bool vis[N];
int nx[N],ny[N]; int dir4[4][2]= {{1,0},{0,1},{-1,0},{0,-1}};
int dir8[8][2]= {{1,0},{1,1},{0,1},{-1,1},{-1,0},{-1,-1},{0,-1},{1,-1}}; struct node
{
int x,y;
}; bool cmp1(node a,node b)
{
return a.x<b.x;
}
pair<int,int> num [N];
int c[N];
int pre[N];
int last[N];
int maxxa=-1;
int maxxb=-1; int main()
{
cin>>n;
rep(i,0,n)
{
cin>>j;
++c[j];
maxxa=max(maxxa,c[j]);///找出那个数出现次数最多
maxxb=max(maxxb,j);///那个数最大
if(c[j]==1)
{
pre[j]=last[j]=i;/// pre[1]=last[1]=1
}
else
{
pre[j]=min(pre[j],i);
last[j]=max(last[j],i);
}
// cout<<"pre[j]="<<j<<" "<<pre[j]<<endl;
// cout<<"last[j]="<<j<<" "<<last[j]<<endl;
}
//cout<<maxxa<<endl;///3
//cout<<maxxb<<endl;///2
int fx=-1,fy=N;
for(int i=0; i<=maxxb; ++i)
{
if(c[i]==maxxa)
{
if(last[i]-pre[i]<fy)
{
fx=pre[i];
fy=last[i]-pre[i];
}
}
}
cout<<fx+1<<" "<<fx+fy+1;
return 0;
}

C. Amr and Chemistry

【题意】

AMR热爱化学,以及专门做实验。他正在准备一个新的有趣的实验。

AMR有n个不同类型的化学品。每一化学i具有艾升的起始体积。对于该实验,阿姆鲁具有混合全部的化学品一起。但全部的化学品卷必须等于第一位。所以,他的任务就是使全部的化学品数量相等。



要做到这一点。阿姆鲁能够做两种不同的操作。

选择一些化学i和一倍当前音量。使新卷将2AI

选择一些化学i和除以2(整数除法)的体积。使新卷会

如果每一个化学包括在无限量的容器。如今阿姆鲁想知道是什么操作,使全部化学品卷等于所需的最低人数?

代码:

#ifndef _GLIBCXX_NO_ASSERT
#include <cassert>
#endif #include <cctype>
#include <cerrno>
#include <cfloat>
#include <ciso646>
#include <climits>
#include <clocale>
#include <cmath>
#include <csetjmp>
#include <csignal>
#include <cstdarg>
#include <cstddef>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime> #if __cplusplus >= 201103L
#include <ccomplex>
#include <cfenv>
#include <cinttypes>
#include <cstdalign>
#include <cstdbool>
#include <cstdint>
#include <ctgmath>
#include <cwchar>
#include <cwctype>
#endif // C++
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <typeinfo>
#include <utility>
#include <valarray>
#include <vector> #if __cplusplus >= 201103L
#include <array>
#include <atomic>
#include <chrono>
#include <condition_variable>
#include <forward_list>
#include <future>
#include <initializer_list>
#include <mutex>
#include <random>
#include <ratio>
#include <regex>
#include <scoped_allocator>
#include <system_error>
#include <thread>
#include <tuple>
#include <typeindex>
#include <type_traits>
#include <unordered_map>
#include <unordered_set>
#endif using namespace std;
#define rep(i,j,k) for(int i=(int)j;i<(int)k;++i)
#define per(i,j,k) for(int i=(int)j;i>(int)k;--i)
#define lowbit(a) a&-a
#define Max(a,b) a>b?a:b
#define Min(a,b) a>b? b:a
#define mem(a,b) memset(a,b,sizeof(a))
#define debug(x) cerr<<#x<<"="<<x<<endl;
#define FF first
#define SS second
#define PB push_back
#define MP make_pair
typedef long long ll;
const ll INF=1<<28;
const ll LINF=1ll<<61;
//My own input/output stream
#define geti(x) x=getnum()
#define getii(x,y) geti(x),geti(y)
#define getiii(x,y,z) getii(x,y),geti(z)
#define puti(x) putnum(x),putsp()
#define putii(x,y) puti(x),putnum(y),putsp()
#define putiii(x,y,z) putii(x,y),putnum(z),putsp()
#define putsi(x) putnum(x),putendl()
#define putsii(x,y) puti(x),putnum(y),putendl()
#define putsiii(x,y,z) putii(x,y),putnum(z),putendl()
inline ll getnum()
{
register ll r=0;
register bool ng=0;
register char c;
c=getchar();
while(c!='-'&&(c<'0'||c>'9'))c=getchar();
if(c=='-')ng=1,c=getchar();
while(c!=' '&&c!='\n')r=r*10+c-'0',c=getchar();
if(ng)r=-r;
return r;
}
template <class T> inline void putnum(T x)
{
if(x<0)putchar('-'),x=-x;
register short a[20]= {},sz=0;
while(x>0)a[sz++]=x%10,x/=10;
if(sz==0)putchar('0');
for(int i=sz-1; i>=0; i--)putchar('0'+a[i]);
}
inline void putsp()
{
putchar(' ');
}
inline void putendl()
{
putchar('\n');
}
inline char mygetchar()
{
register char c=getchar();
while(c==' '||c=='\n')c=getchar();
return c;
}
typedef long long LL;
typedef unsigned long long LLU;
typedef double db;
const int N=1e6+10;
int i,j,n,m,t,ans,res,cnt,tmp; char str[N];
bool vis[N];
int nx[N],ny[N]; int dir4[4][2]= {{1,0},{0,1},{-1,0},{0,-1}};
int dir8[8][2]= {{1,0},{1,1},{0,1},{-1,1},{-1,0},{-1,-1},{0,-1},{1,-1}}; struct node
{
int x,y;
}; bool cmp1(node a,node b)
{
return a.x<b.x;
}
pair<int,int> num [N];
int c[N];
int pre[N];
int last[N];
int maxxa=-1;
int maxxb=-1;
int a[N],b[N];
vector <bool>v[N],vans;
int main()
{
scanf("%d",&n);
int kk=20;
for(int i=1; i<=n; i++)
{
scanf("%d",&a[i]);
int j;
for(j=1; j<20; j++)
{
if((a[i]>>(j-1))>0&&(a[i]>>j)==0)
{
break;
}
}
for(int k=j-1; k>=0; k--)
{
v[i].PB((a[i]>>k)&1);
}
kk=min(kk,int(v[i].size()));
}
for(int i=0; i<kk; i++)
{
bool ok=1;
for(int j=1; j<n; j++)
{
if(v[j][i]!=v[j+1][i])
{
ok=0;
break;
}
}
if(ok)vans.PB(v[1][i]);
else break;
}
for(int i=1; i<=n; i++)
{
int j=vans.size();
while(j<v[i].size()&&v[i][j]==0)
{
b[i]++;
j++;
}
}
int ans=99999999999;
for(int i=0; i<30-int(vans.size()); i++)
{
int tans=0;
for(int j=1; j<=n; j++)
{
tans+=int(v[j].size())-int(vans.size()+min(i,b[j]))+max(0,i-b[j]);
}
ans=min(ans,tans);
}
printf("%d\n",ans);
return 0;
}

Codeforces Round #312 (Div. 2) ABC题解的更多相关文章

  1. # Codeforces Round #529(Div.3)个人题解

    Codeforces Round #529(Div.3)个人题解 前言: 闲来无事补了前天的cf,想着最近刷题有点点怠惰,就直接一场cf一场cf的刷算了,以后的题解也都会以每场的形式写出来 A. Re ...

  2. Codeforces Round #557 (Div. 1) 简要题解

    Codeforces Round #557 (Div. 1) 简要题解 codeforces A. Hide and Seek 枚举起始位置\(a\),如果\(a\)未在序列中出现,则对答案有\(2\ ...

  3. Codeforces Round #540 (Div. 3) 部分题解

    Codeforces Round #540 (Div. 3) 题目链接:https://codeforces.com/contest/1118 题目太多啦,解释题意都花很多时间...还有事情要做,就选 ...

  4. Codeforces Round #538 (Div. 2) (A-E题解)

    Codeforces Round #538 (Div. 2) 题目链接:https://codeforces.com/contest/1114 A. Got Any Grapes? 题意: 有三个人, ...

  5. Codeforces Round #531 (Div. 3) ABCDEF题解

    Codeforces Round #531 (Div. 3) 题目总链接:https://codeforces.com/contest/1102 A. Integer Sequence Dividin ...

  6. Codeforces Round #527 (Div. 3) ABCDEF题解

    Codeforces Round #527 (Div. 3) 题解 题目总链接:https://codeforces.com/contest/1092 A. Uniform String 题意: 输入 ...

  7. Codeforces Round #499 (Div. 1)部分题解(B,C,D)

    Codeforces Round #499 (Div. 1) 这场本来想和同学一起打\(\rm virtual\ contest\)的,结果有事耽搁了,之后又陆陆续续写了些,就综合起来发一篇题解. B ...

  8. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

  9. Codeforces Round #545 (Div. 1) 简要题解

    这里没有翻译 Codeforces Round #545 (Div. 1) T1 对于每行每列分别离散化,求出大于这个位置的数字的个数即可. # include <bits/stdc++.h&g ...

随机推荐

  1. 学习linux之vi编辑器

    进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件,并将光标置于最后 ...

  2. XMPP通讯开发-1

    有关XMPP的相关知识这里就不讲解了,网上有很多,这里我使用的NetBeans+Openire+smack搭建一个以XMPP协议的通讯工具,对于这部分知识我也不是很了解,也是初识吧,可能有些概念会混淆 ...

  3. 使用ObjectInputStream的readObject()方法如何判断读取到多个对象的结尾

    摘自http://blog.csdn.net/fjdingsd/article/details/46765803 使用ObjectInputStream的readObject()方法如何判断读取到多个 ...

  4. Spring的AOP2

    本文是<AOP 那点事儿>的续集. 在上篇中,我们从写死代码,到使用代理:从编程式 Spring AOP 到声明式 Spring AOP.一切都朝着简单实用主义的方向在发展.沿着 Spri ...

  5. java学习笔记day02

    1.如何定义一个功能,并通过函数(方法)体现出来呢?  1)明确改功能运算后的结果.确定函数的返回值类型.  2)明确在实现该功能的过程中是否有未知内容参与运算.确定参数列表. 2.函数重载:在同一个 ...

  6. NFS(网络文件系统的搭建)

    关于NFS的原理,我在这就不概诉了,其实非常简答的理解就是一个网络磁盘,你需要把它挂载到你的磁盘上使用而已.那接下来谈谈如和搭建NFS网络文件系统. 需要使用2台机器作此实验,我分别配置IP为192. ...

  7. yum安裝的包如何保留到本地

    一, 很多时候,我们一直用yum安装的软件,但是毫无疑问,很多人都会想yum安装的软件的包存放在哪里了呢? 这是因为yum默认并不保存你所安装的包,那么如何才能保留安装的软件包呢? 方法很简单:修改y ...

  8. 使用SOAPUI测试WEBAPI接口

    其实很简单,用起来也挺方便的. 首先,先去百度下SoapUI 下载,下载安装好后,打开软件. 1.新建一个项目 点击 Create Empty Project 按钮后,会自动新建一个项目,名字默认为: ...

  9. android 多语言适配

    建好android项目后,默认的是有个values文件,该文件下面默认的有strings.xml. 做多语言适配的时候,就需要在创建好的项目中,右键单击res文件夹,选择创建新的xml文件. 然后点击 ...

  10. 关于内层DIV设置margin-top不起作用的解决方案

    from:http://www.cnblogs.com/huangyong8585/archive/2013/05/21/3090779.html (一) 近日在做另外一个站点的时候,又遇到这个问题, ...