比赛 NOIP2017普及组模拟赛Mike 评测结果 AAAAAAAAAA
题目名称 嘉豪 最终得分 100
用户昵称 _IOSTREAM_ 运行时间 0.218 s
代码语言 C++ 内存使用 9.87 MiB
提交时间 2017-09-30 12:26:37
显示代码纯文本
#include<cstdio>
using namespace std;
#ifdef  negative
#define getc() ((HEAD==TAIL&&((buff[0]=buff[65536]),(buff[1]=buff[65537]),(TAIL=(HEAD=REHEAD)+fread(REHEAD,1,65536,stdin)),HEAD==TAIL))?0:*HEAD++)
char buff[65538],*REHEAD=buff+2,*HEAD=REHEAD,*TAIL=REHEAD;
#else
#define getc() ((HEAD==TAIL&&((TAIL=(HEAD=buff)+fread(buff,1,65536,stdin)),HEAD==TAIL))?0:*HEAD++)
char buff[65536],*HEAD=buff,*TAIL=buff;
#endif
#define putc(x) (OHEAD==OTAIL?OHEAD=obuf,fwrite(obuf,1,655360,stdout),*OHEAD++=x:*OHEAD++=x)
#define oend() fwrite(obuf,1,OHEAD-obuf,stdout)
char obuf[655360],*OHEAD=obuf,*OTAIL=obuf+655360;
int osta[16];
template<class T>
inline
#ifdef READ_BOOL
bool read(T &ret){
#else
void read(T &ret){
#endif
    register char CH;
#ifdef negative
    register bool flag=false;
#endif
#ifdef READ_BOOL
    for(;CH=getc(),CH<48;)if(!CH)return false;
#else
    for(;CH=getc(),CH<48;);
#endif
#ifdef negative
    if(*(HEAD-2)=='-')flag=true;
#endif
    for(ret=CH^48;CH=getc(),CH>47;)ret=(ret<<3)+(ret<<1)+(CH^48);
#ifdef negative
    if(flag)ret=-ret;
#endif
#ifdef READ_BOOL
    return true;
#endif
}
template<class T>
inline void write(register T x){
    if(x==0)putc('0');
    else{
        register int o=0;
        for(;x;x/=10)osta[o++]=x%10;
        for(;o;)putc(osta[--o]+48);
    }
    putc(' ');
}

unsigned long long int n;
int cnt[131072],x[1100000],y[1100000],m;

int main(){
	freopen("jiahao1.in","rb",stdin);
	freopen("jiahao1.out","w",stdout);
	read(n);
	n<<=1;
	read(m);
	for(int i=0;i<m;i++)
		read(x[i]),x[i]<<=1;
	register int i;
	for(i=0;i<m;i++)cnt[x[i]&131071]++;
	for(i=1;i<=131071;i++)cnt[i]+=cnt[i-1];
	for(i=m-1;i>=0;i--)y[--cnt[x[i]&131071]]=x[i];
	for(i=0;i<=131071;i++)cnt[i]=0;
	for(i=0;i<m;i++)cnt[y[i]>>16&131071]++;
	for(i=1;i<=131071;i++)cnt[i]+=cnt[i-1];
	for(i=m-1;i>=0;i--)x[--cnt[y[i]>>16&131071]]=y[i];
	for(i=0;i<m;i++)
		if(x[i]<n)n+=(x[i]>>1);
		else{
			printf("%d",i);
			return 0;
		}
	printf("%d",i);
	return 0;
}