ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

AtCoder Beginner Contest 236 A-D题解

2022-01-24 20:34:01  阅读:186  来源: 互联网

标签:AtCoder int 题解 ll vis flag 109 236 配对


A - chukodai

题意

使字符串第a个字符与第b个字符交换`

#include<bits/stdc++.h>
using namespace std;
int dp[109][109],a[109][109];
char c[100009];
int main()
{
	int t,i,flag,j,k,m,n,x,y,cnt,o,l,r;
    char h;
	cin>>c>>x>>y;
    h=c[x-1];
    c[x-1]=c[y-1];
    c[y-1]=h;
    cout<<c;
	return 0;
}

B - Who is missing?

题意

共有N种卡片,每种卡片有四张,输入4N-1张卡片,求缺少哪张卡片

#include<bits/stdc++.h>
using namespace std;
int vis[900009],a[109][109];
char c[100009];
int main()
{
	int t,i,flag,j,k,m,n,x,y,cnt,o,l,r;
    cin>>n;
    for(i=1;i<=n*4-1;i++)
    {
    	scanf("%d",&k);
    	vis[k]++;
	}
	for(i=1;i<=n;i++)
	if(vis[i]<4)printf("%d",i);
	return 0;
}

C - Route Map

题意

共有n个车站,有m个车站列车会停靠,求各个车站列车是否会停靠

#include<bits/stdc++.h>
using namespace std;
int vis[900009],a[109][109];
string s[100009];
int main()
{
	int t,i,flag,j,k,m,n,x,y,cnt,o,l,r;
    cin>>n>>m;
    string s1;
    map<string ,int>has;
    for(i=1;i<=n;i++)
    {
    	cin>>s[i];
	}
	for(i=1;i<=m;i++){
		cin>>s1;
		has[s1]=1;
	}
	for(i=1;i<=n;i++)
	{
	if(has[s[i]]==1)printf("Yes\n");
		else printf("No\n");
	}
	return 0;
}

D - Dance

题意

共有2N个人,编号为1-2N,现要人们两两配对,若编号为i的人想与编号为j的人配对,i必须小于j,i与j配对后获得亲和力B。所有人配对完成后亲和力分别为B1,B2…BN,总乐趣为B1⊕B2⊕…⊕BN。求所有配对组合中总乐趣的最大值。

做法

使用dfs搜索所有情况,因为只能找编号比自己大的人配对,所以每次先找出当前需要配对的人 flag,再从flag+1到2N中寻找当前未配对的人与flag配对。当flag等于2N时说明所有人配对完成。

#include<bits/stdc++.h>
using namespace std;
typedef  long long ll;
ll vis[909],a[109][109],n,ma=0;
void dfs(ll flag,ll val){//falg表示当前需要配对的人的编号   val表示当前总乐趣
	ll i,j;
	if(flag==n*2){
		ma=max(ma,val);
		return ;
	}
	ll fl=0,ci;
	if(vis[flag]){//若flag已经与其他人配对则寻找下一个需要配对的人
		dfs(flag+1,val);
	}
	else {
		for(i=flag+1;i<=n*2;i++){//寻找当前未配对的人与flag配对
	    if(vis[i])continue;
		vis[i]=1;
		vis[flag]=1;
		dfs(flag+1,val^a[flag][i]);
		vis[flag]=0;
		vis[i]=0;
	    }
	}
	
}
int main()
{
	ll t,i,j,k,m,x,y,cnt,o,l,r;
    cin>>n;
    for(i=1;i<=n*2-1;i++){
    	for(j=i+1;j<=n*2;j++)
    	scanf("%lld",&a[i][j]);
	}
    dfs(1,0);
	cout<<ma;
	return 0;
}

标签:AtCoder,int,题解,ll,vis,flag,109,236,配对
来源: https://blog.csdn.net/hvbgff/article/details/122673688

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有