zoukankan      html  css  js  c++  java
  • cf 1305 (A~F)

    题目链接

    CF1305A Kuroni and the Gifts

    思路:

    将两个数组都从小到大排序,因为数组里不会有重复元素,所以和也不会重复。

    代码:

    int main(){
    	int _=read;
    	while(_--){
    		int n;cin>>n;
    		vector<int>a,b;
    		int x;
    		for(int i=0;i<n;i++) cin>>x,a.push_back(x); 
    		for(int i=0;i<n;i++) cin>>x,b.push_back(x); 
    		sort(a.begin(),a.end());
    		sort(b.begin(),b.end());
    		for(int i=0;i<n;i++){
    			cout<<a[i]<<" ";
    		}
    		cout<<endl;
    		for(int i=0;i<n;i++){
    			cout<<b[i]<<" ";
    		}
    		cout<<endl;
    	}
    	return 0;
    }
    

    CF1305B Kuroni and Simple Strings

    题意:

    给定一个括号序列,删除所有的合法括号序列使得不能再删除。求方法。

    思路:

    首先,删除一次和删除多次是等价的,所以k只有0和1两种选择。

    其次,删除后的序列一定是以某个点为分界点,左边全部是),右边全部是(。

    所以就可以设两个指针,分别从开始和结尾向后扫,左指针记录(的位置,右指针记录)的位置,直到两个指针相遇。

    答案的输出要升序输出。

    代码:

    char s[maxn];
    int main(){
    	cin>>s+1;
    	vector<int>res;
    	int l=1,r=strlen(s+1);
    	while(l<r){
    		if(s[l]==')') l++;
    		else{
    			if(s[r]=='(') r--;
    			else{
    				res.push_back(l),res.push_back(r);
    				l++,r--;
    			}
    		}
    	}
    	if(res.size()==0) puts("0");
    	else{
    		cout<<"1
    "<<res.size()<<endl;
    		sort(res.begin(),res.end());
    		for(int i=0;i<res.size();i++)
    			cout<<res[i]<<" ";
    	}
    	return 0;
    }
    

    CF1305C Kuroni and Impossible Calculation

    思路:

    看到m的数据范围很小,还是犹豫了一下才想到。

    做过很多遍的鸽笼原理了。

    由于m很小,当n>m时,一定会有两项a[i]的值相同,这就使得答案为0;

    反之,直接n^2暴力跑就可以了。

    代码:

    const int maxn =2e5+100,mod=998244353;
    int n,m,a[maxn];
    int main(){
    	n=read,m=read;
    	for(int i=1;i<=n;i++) a[i]=read;
    	if(n>m) cout<<"0"<<endl;
    	else{
    		ll ans=1;
    		for(int i=1;i<=n;i++)
    			for(int j=i+1;j<=n;j++)
    				ans=ans*abs(a[i]-a[j])%m;
    		cout<<ans<<endl;
    	}
    	return 0;
    }
    

    另一篇

    CF1305D Kuroni and the Celebration

    思路:

    交互题。考虑叶子节点的特殊性:如果两个叶子节点的lca为其中一个的话,这个一定是根节点。不是的话,就删除这两个叶子节点,继续找下一个叶子节点。 最多执行n/2次。

    也就是说首先将所有度数为1的点(叶子节点)放到队列里,每次取出两个叶子节点,求他们的lca,如果不是这两个点的话,将该点删除,并将相邻点的度数-1,寻找新的叶子节点。

    代码:

    int n;
    vector<int>g[maxn];
    int din[maxn];
    queue<int>q;
    int ask(int l,int r){
        cout<<"? "<<l<<" "<<r<<endl;
        fflush(stdout);
        int pos;cin>>pos;
        return pos;
    }
    int vis[maxn];
    int main(){
    	cin>>n;
    	for(int i=2;i<=n;i++){
    		int u=read,v=read;
    		g[u].push_back(v);
    		g[v].push_back(u);
    		din[u]++;din[v]++;
    	}
    	for(int i=1;i<=n;i++)
    		if(din[i]==1) q.push(i);
    	for(int i=1;i<=n/2;i++){
    		int u=q.front();q.pop();
    		int v=q.front();q.pop();
    		int res=ask(u,v);
    		if(res==u||res==v){
    			cout<<"! "<<res<<endl;
    			return 0;
    		}
    		for(int i=0;i<g[u].size();i++){
    			int t=g[u][i];
    			din[t]--;
    			if(!vis[t]&&din[t]==1) q.push(t);
    		}
    		for(int i=0;i<g[v].size();i++){
    			int t=g[v][i];
    			din[t]--;
    			if(!vis[t]&&din[t]==1) q.push(t);
    		}
    		vis[u]=1;vis[v]=1;
    	}
    	for(int i=1;i<=n;i++)
    		if(vis[i]==0){
    			cout<<"! "<<i<<endl;break;
    		}
    	return 0;
    }
    
  • 相关阅读:
    第3章 结束会话端点(EndSession Point)
    第2章 授权端点(Authorize Endpoint)
    第1章 发现端点(Discovery Endpoint)
    欢迎使用IdentityModel文档!- IdentityModel 中文文档(v1.0.0)
    IdentityModel 中文文档(v1.0.0) 目录
    第66章 视频
    第65章 博客帖子
    第64章 学习
    Jenkins Ant 自动编译部署测试环境
    jenkins+jmeter+ant自动化接口测试集成
  • 原文地址:https://www.cnblogs.com/OvOq/p/14749016.html
Copyright © 2011-2022 走看看