zoukankan      html  css  js  c++  java
  • [ABC185] AtCoder Beginner Contest 185

    AtCoder Beginner Contest 185.


    Task Name Time Limit Memory Limit
    A ABC Preparation 2 sec 1024 MB Submit
    B Smartphone Addiction 2 sec 1024 MB Submit
    C Duodecim Ferra 2 sec 1024 MB Submit
    D Stamp 2 sec 1024 MB Submit
    E Sequence Matching 2 sec 1024 MB Submit
    F Range Xor Query 3 sec 1024 MB Submit

    A

    #pragma GCC optimize(2)
    #include<bits/stdc++.h>
    
    using namespace std;
    typedef long long LL;
    typedef unsigned long long ULL;
    
    const int INF=0x3f3f3f3f;
    
    int main()
    {
    //	freopen("1.in","r",stdin);
    	
    	int a,b,c,d;
    	cin>>a>>b>>c>>d;
    	a=min(a,b);
    	a=min(a,c);
    	a=min(a,d);
    	cout<<a<<endl;
    	return 0;
    }
    

    B

    #include<bits/stdc++.h>
    
    using namespace std;
    typedef long long LL;
    typedef unsigned long long ULL;
    
    const int N=1024;
    
    int n,m,t;
    
    int main()
    {
    //	freopen("1.in","r",stdin);
    	int i;
    	int x,y;
    	
    	int last=0;
    	cin>>n>>m>>t;
    	int lit=n;
    	for(i=1;i<=m;i++) {
    		cin>>x>>y;
    		n-=(x-last);
    		if(n<=0) {
    			printf("No
    ");
    			return 0;
    		}
    		n+=(y-x);
    		if(n>lit) n=lit;
    		last=y;
    	}
    	
    	n-=(t-last);
    	if(n<=0) printf("No
    ");
    	else printf("Yes
    ");
    	
    	return 0;
    }
    

    C

    (C_{L-1}^{11})

    #pragma GCC optimize(2)
    #include<bits/stdc++.h>
    
    using namespace std;
    typedef long long LL;
    typedef unsigned long long ULL;
    
    // C(L-1,11)
    
    const int N=256;
    
    LL c[N][N];
    
    int main()
    {
    //	freopen("1.in","r",stdin);
    	int i,j;
    	
    	for(i=0;i<=N-1;i++) 
    		for(j=0;j<=i;j++) {
    			if(j==0||j==i) c[i][j]=1;
    			else c[i][j]=c[i-1][j]+c[i-1][j-1];
    		}
    	
    	int n;
    	cin>>n;
    	cout<<c[n-1][11];
    	return 0;
    }
    

    D

    #include<bits/stdc++.h>
    
    using namespace std;
    typedef long long LL;
    typedef unsigned long long ULL;
    
    const int N=4e5+5,INF=2e9;
    
    int n,m,k=INF;
    int a[N];
    
    int paint(int len)
    {
    	return len/k+(len%k>0);
    }
    
    int main()
    {
    ///	freopen("1.in","r",stdin);
    	int i;
    	scanf("%d%d",&n,&m);
    	for(i=1;i<=m;i++) 
    		scanf("%d",&a[i]);
    	sort(a+1,a+m+1);
    	a[++m]=n+1;
    	for(i=1;i<=m;i++) {
    		if(a[i]==a[i-1]+1) continue;
    		k=min(k,a[i]-a[i-1]-1);
    	}
    	int ans=0;
    	for(i=1;i<=m;i++) {
    		if(a[i]==a[i-1]+1) continue;
    		else ans+=paint(a[i]-a[i-1]-1);
    	}
    	cout<<ans<<endl;
    	
    	return 0;
    }
    

    E

    (n^3) 竟然可过,这 Atcoder 神机。

    不过后来又被我优化成了 (O(n^2)) 了。

    #include<bits/stdc++.h>
    
    using namespace std;
    typedef long long LL;
    typedef unsigned long long ULL;
    
    const int N=1024,INF=0x3f3f3f3f;
    
    int f[N][N];
    int n,m;
    int a[N],b[N];
    int g1[N],g2[N];
    
    int main()
    {
    //	freopen("1.in","r",stdin);
    	int i,j;
    	
    	scanf("%d%d",&n,&m);
    	for(i=1;i<=n;i++) scanf("%d",&a[i]);
    	for(i=1;i<=m;i++) scanf("%d",&b[i]);
    	
    	memset(f,0x3f,sizeof f);
    	int ans=INF;
    	f[0][0]=0;
    	for(j=0;j<=m;j++) g2[j]=f[0][j]-0-1;
    	for(i=1;i<=n;i++) {
    		g1[0]=f[i-1][0]-0-1;
    		for(j=1;j<=m;j++) 
    			g1[j]=min(g1[j-1],f[i-1][j]-j-1);
    			
    		for(j=1;j<=m;j++) {
    			// f[i][j]= min{ f[k][p]+(j-p-1)+(i-k-1)} + (a[i]!=a[j])
    			// f[i-1][j-1] = max { f[k][p]+(j-p-1)+(i-k-1) ) - 2 + (a[i-1]!=a[j-1]);
    			
    			f[i][j]=f[i-1][j-1]-(a[i-1]!=b[j-1])+2+(a[i]!=b[j]);
    			// else f[i-1][k from 0 to j-1]
    //			for(int k=0;k<=j-1;k++) 
    //				f[i][j]=min(f[i][j],f[i-1][k]+(j-k-1)+(a[i]!=b[j]));
    			f[i][j]=min(f[i][j],g1[j-1]+j+(a[i]!=b[j]));
    			
    //			for(int k=0;k<=i-1;k++) 
    //				f[i][j]=min(f[i][j],f[k][j-1]+i-k-1+(a[i]!=b[j]));
    			f[i][j]=min(f[i][j],g2[j-1]+i+(a[i]!=b[j]));
    			
    			ans=min(ans,f[i][j]+(n-i)+(m-j));
    		}
    		for(j=0;j<=m;j++) 
    			g2[j]=min(g2[j],f[i][j]-i-1);
    	}
    	
    	cout<<ans<<endl;
    	return 0;
    }
    

    话说我状态定义想偏了,要是换一个可能更好些。

    F

    #include<bits/stdc++.h>
    
    using namespace std;
    typedef long long LL;
    typedef unsigned long long ULL;
    
    const int N=3e5+5;
    
    int n,m;
    struct Bits
    {
    	int c[N];
    	inline int lowbit(int x) { return x&(-x); }
    	void Update(int x,int y)
    	{
    		for(;x<=n;x+=lowbit(x)) 
    			c[x]^=y;
    	}
    	int Sum(int x)
    	{
    		int res=0;
    		for(;x>=1;x-=lowbit(x)) 
    			res^=c[x];
    		return res;
    	}
    }C;
    
    int main()
    {
    //	freopen("1.in","r",stdin);
    	int i;
    	int opt,x,y;
    	
    	scanf("%d%d",&n,&m);
    	for(i=1;i<=n;i++) {
    		scanf("%d",&x);
    		C.Update(i,x);
    	}
    	
    	while(m--) {
    		scanf("%d%d%d",&opt,&x,&y);
    		if(opt==1) C.Update(x,y);
    		else printf("%d
    ",C.Sum(x-1)^C.Sum(y));
    	}
    	return 0;
    }
    

    维护一个前缀异或和。

  • 相关阅读:
    Java的常用API之System类简介
    Java的常用API之Date类简介
    Java的常用API之Object类简介
    数据库知识总结(全)
    学习:浏览器访问网站的总流程
    学习:TCP/UDP协议分析(TCP四次挥手)
    学习:TCP/UDP协议分析(TCP三次握手)
    学习:ICMP协议
    实现:ARP探测存活主机
    学习:ARP协议/数据包分析
  • 原文地址:https://www.cnblogs.com/cjl-world/p/14130767.html
Copyright © 2011-2022 走看看