zoukankan      html  css  js  c++  java
  • CF4

    A

    A

    奇数或者(2)(NO)

    #include<bits/stdc++.h>
    using namespace std;
    namespace red{
    	inline int read()
    	{
    		int x=0;char ch,f=1;
    		for(ch=getchar();(ch<'0'||ch>'9')&&ch!='-';ch=getchar());
    		if(ch=='-')f=0,ch=getchar();
    		while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
    		return f?x:-x;
    	}
    	int n;
    	inline void main()
    	{
    		n=read();
    		if(n&1||n==2) puts("NO");
    		else puts("YES");
    	}
    }
    signed main()
    {
    	red::main();
    	return 0;
    }
    

    B

    B

    先都给最少的,然后从前往后加就行了

    #include<bits/stdc++.h>
    using namespace std;
    namespace red{
    	inline int read()
    	{
    		int x=0;char ch,f=1;
    		for(ch=getchar();(ch<'0'||ch>'9')&&ch!='-';ch=getchar());
    		if(ch=='-')f=0,ch=getchar();
    		while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
    		return f?x:-x;
    	}
    	const int N=50;
    	int n,sum;
    	int a[N],b[N],c[N];
    	inline void main()
    	{
    		n=read(),sum=read();
    		for(int i=1;i<=n;++i)
    		{
    			a[i]=read(),b[i]=read();
    		}
    		for(int i=1;i<=n;++i)
    		{
    			c[i]=a[i],sum-=a[i];
    		}
    		if(sum<0)
    		{
    			puts("NO");
    			return;
    		}
    		for(int i=1;i<=n&&sum;++i)
    		{
    			c[i]+=min(sum,b[i]-a[i]);
    			sum-=min(sum,b[i]-a[i]);
    		}
    		if(sum)
    		{
    			puts("NO");
    			return;
    		}
    		puts("YES");
    		for(int i=1;i<=n;++i) printf("%d ",c[i]);
    	}
    }
    signed main()
    {
    	red::main();
    	return 0;
    }
    

    C

    C

    (map)

    #include<bits/stdc++.h>
    using namespace std;
    namespace red{
    	inline int read()
    	{
    		int x=0;char ch,f=1;
    		for(ch=getchar();(ch<'0'||ch>'9')&&ch!='-';ch=getchar());
    		if(ch=='-')f=0,ch=getchar();
    		while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
    		return f?x:-x;
    	}
    	int n;
    	map<string,int> q;
    	string s;
    	char t[110];
    	int st[100],top,l;
    	inline void main()
    	{
    		n=read();
    		for(int i=1;i<=n;++i)
    		{
    			cin>>s;
    			if(!q[s])
    			{
    				q[s]=1;
    				puts("OK");
    			}
    			else
    			{
    				int tmp=q[s];
    				++q[s];
    				memset(t,0,sizeof(t));	
    				while(tmp) st[++top]=tmp%10,tmp/=10;
    				l=0;
    				while(top) t[l++]=st[top--]+'0';
    				cout<<s<<t<<endl;
    			}
    		}
    	}
    }
    signed main()
    {
    	red::main();
    	return 0;
    }
    

    D

    D

    (w)排序以后就是裸的最长严格上升子序列了……

    (nle 5000)显然可以直接暴力,然而我还是写了线段树优化……

    注意严格上升,当(w)与上一位不同时再把上一位(w)值加进线段树

    #include<bits/stdc++.h>
    using namespace std;
    namespace red{
    #define ls(p) (p<<1)
    #define rs(p) (p<<1|1)
    #define mid ((l+r)>>1)
    	inline int read()
    	{
    		int x=0;char ch,f=1;
    		for(ch=getchar();(ch<'0'||ch>'9')&&ch!='-';ch=getchar());
    		if(ch=='-')f=0,ch=getchar();
    		while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
    		return f?x:-x;
    	}
    	const int N=1e6+10;
    	int aa,bb,tot,n,m,pre;
    	int f[N],g[N];
    	int ret,w;
    	int st[N],top;
    	struct node
    	{
    		int x,y,id;
    		inline bool operator < (const node &t) const
    		{
    			return x<t.x;
    		}
    	}a[N];
    	int ans[N<<2],pos[N<<2];
    	inline void update(int d,int l,int r,int p,int k,int w)
    	{
    		if(l==r)
    		{
    			if(k>ans[p])
    			{
    				ans[p]=k;
    				pos[p]=w;
    			}
    			return;
    		}
    		if(d<=mid) update(d,l,mid,ls(p),k,w);
    		else update(d,mid+1,r,rs(p),k,w);
    		ans[p]=max(ans[ls(p)],ans[rs(p)]);
    		pos[p]=ans[ls(p)]>=ans[rs(p)]?pos[ls(p)]:pos[rs(p)];
    	}
    	inline node query(int tl,int tr,int l,int r,int p)
    	{
    		if(!tr) return (node){0,0};
    		if(tl<=l&&r<=tr) return (node){ans[p],pos[p]};
    		if(tr<=mid) return query(tl,tr,l,mid,ls(p));
    		if(tl>mid) return query(tl,tr,mid+1,r,rs(p));
    		node tx=query(tl,tr,l,mid,ls(p)),ty=query(tl,tr,mid+1,r,rs(p));
    		return tx.x>=ty.x?tx:ty;
    	}
    	inline void main()
    	{
    		tot=read(),aa=read(),bb=read();
    		for(int x,y,i=1;i<=tot;++i)
    		{
    			x=read(),y=read();
    			if(x<=aa||y<=bb) continue;
    			a[++n].x=x,a[n].y=y,a[n].id=i;
    			m=max(m,a[n].y);
    		}
    		if(!n)
    		{
    			puts("0");
    			return;
    		}
    		sort(a+1,a+n+1);
    		pre=1;
    		for(int i=1;i<=n;++i)
    		{
    			if(a[i].x^a[i-1].x)
    			{
    				for(int j=pre;j<=i-1;++j) update(a[j].y,1,m,1,f[j],j);
    				pre=i;
    			}
    			node t=query(1,a[i].y-1,1,m,1);
    			f[i]=f[t.y]+1;
    			g[i]=t.y;
    			if(f[i]>ret) ret=f[i],w=i;
    		}
    		printf("%d
    ",ret);
    		while(w) st[++top]=a[w].id,w=g[w];
    		while(top) printf("%d ",st[top--]);
    	}
    }
    signed main()
    {
    	red::main();
    	return 0;
    }
    
  • 相关阅读:
    时间转换成时间戳
    元字符为名称的时候,使用两个反斜杠转义:\
    批量修改文件夹及文件用户权限和用户组权限 centos
    HDU6797 多校第三场 Tokitsukaze and Rescue
    AtCoder Regular Contest 103 E
    2020牛客第六场 B题 Binary Vector
    Codeforces Round #659 (Div. 2) B1. Koa and the Beach (Easy Version)
    Codeforces Round #659 (Div. 2) C. String Transformation 1
    Codeforces Round #659 (Div. 2) D GameGame
    P3194 [HNOI2008]水平可见直线 计算几何栈维护下凸壳
  • 原文地址:https://www.cnblogs.com/knife-rose/p/12232357.html
Copyright © 2011-2022 走看看