zoukankan      html  css  js  c++  java
  • 第十届山东省ACM省赛复现补题报告

    C  Wandering Robot

      

    #include<bits/stdc++.h>
    using nmaespace std;
    int main(){
    int p;
    		cin>>p;
    		for(int i=0;i<n;i++){
    			if(p[i]=='R'){
    				m++;
    			}
    			if(p[i]=='L'){
    				m--;
    			}
    			if(p[i]=='U'){
    				o++;
    			}
    			if(p[i]=='D'){
    				o--;
    			}
    			maxn=max(maxn,abs(m)+abs(o));
    		}
    		m=(k-1)*m;
    		o=(k-1)*o;
    		for(int i=0;i<n;i++){
    			if(p[i]=='R'){
    				m++;
    			}
    			if(p[i]=='L'){
    				m--;
    			}
    			if(p[i]=='U'){
    				o++;
    			}
    			if(p[i]=='D'){
    				o--;
    			}
    			maxn=max(maxn,abs(o)+abs(m));
    		}
    		cout<<maxn<<endl;
    	}
    } 
    

     D  Game on a Graph

    题意:由题知,n个点m条线,根据每个人的取线的顺序,问哪一队取出一条线后不能把点连接起来

    题解:根据n个点最多要n-1条线,所以只能取m-n+1,超过的就输了。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1e6+5;
    struct edge{
    	int u;
    	int v;
    };
    int main(){
    	int t;
    	cin>>t;
    	while(t--){
    		int k,n,m;
    		string p;
    		cin>>k;
    		cin>>p;
    		cin>>n>>m;
    		edge a[m+10];
    		for(int i=0;i<m;i++){
    			cin>>a[i].u>>a[i].v;
    		}
    		int ans=0;
    		if(m>=n-1){
    			ans=(m-(n-1))%n;
    		} 
    		//cout<<ans<<endl;
    		if(p[ans]=='1'){
    			cout<<2<<endl;
    		}
    		else{
    			cout<<1<<endl;
    		}
    	}
    }
    

      H  Tokens on the Segments

    题意:给出许多个区间,每个区间上的每个点都可以被标记,只要每个区间上有一个点被标记,即可记为这个区间被标记,求最多可以被标记的区间个数。

    题解:对于所有的区间我们进行一个排序,(按左边界小的排序;若左边界同,按右边界小的排序),把这些区间放进一个优先队列,每次都标记左边界,用一个maxx进行记录左边界,如果左边界已经被标记了,就判断区间是否为1,不为1的话就可以把左边界右移一位,然后再次将这个改过的区间加入到优先队列中去。(参照大佬题解)

    代码:

    #include<bits/stdc++.h>
    const int maxn=1e7+5;
    using namespace std;
    struct node{
    	int l,r;
    	bool operator <(node a)const{
    	 if(l==a.l){
    	 	return r>a.r;
    	 }
    	 return l>a.l;
    	}
    }str[maxn],tt;//先按左边界小开始排序,左边相等就按右边界小排序。排序 
    int main(){
    	int t;
    	cin>>t;
    	while(t--){
    		priority_queue<node>q;//优先队列 从大到小放入可以重载<进行排序
    		int n;
    		cin>>n;
    		for(int i=0;i<n;i++){
    			cin>>str[i].l>>str[i].r;
    			q.push(str[i]);
    		} 
    		int num=0;
    		int maxx=0;
    		while(!q.empty()){
    			tt=q.top();
    			q.pop();
    			if(tt.l>maxx){
    				maxx=tt.l;
    				num++;
    			}
    			else if(tt.l<tt.r){
    				tt.l++;
    				q.push(tt);
    			}
    		}
    		cout<<num<<endl;
    	}
    }
    

      

  • 相关阅读:
    SpringMVC扩展
    反射机制
    python day9
    python day8
    python day7
    python day6
    python day4
    python day3
    python day2
    python day1
  • 原文地址:https://www.cnblogs.com/liyongqi/p/13763694.html
Copyright © 2011-2022 走看看