~MAY~

一时间不知道要干啥了,随便写点题目吧

亚运奖牌榜

很简单的模拟,题目看错了整了半天。。

#include<bits/stdc++.h>
using namespace std;
int n;
struct a
{
	int pai[4];
}c1,c2;
int main()
{
	cin>>n;
	memset(c1.pai,0,sizeof(c1.pai));
	memset(c2.pai,0,sizeof(c2.pai));
	for(int i=1;i<=n;i++)
	{
		int nm,k;
		cin>>nm>>k;
		if(nm==0)
		c1.pai[k]++;
		if(nm==1)
		c2.pai[k]++;
	}
	cout<<c1.pai[1]<<" "<<c1.pai[2]<<" "<<c1.pai[3]<<endl;
	cout<<c2.pai[1]<<" "<<c2.pai[2]<<" "<<c2.pai[3]<<endl;
	if((c1.pai[1]>c2.pai[1])||(c1.pai[1]==c2.pai[1]&&c1.pai[2]>c2.pai[2])||(c1.pai[1]==c2.pai[1]&&c1.pai[2]==c2.pai[2]&&c1.pai[3]>c2.pai[3]))
	{
		cout<<"The first win!";
		return 0;
	}
	else if((c1.pai[1]<c2.pai[1])||(c1.pai[1]==c2.pai[1]&&c1.pai[2]<c2.pai[2])||(c1.pai[1]==c2.pai[1]&&c1.pai[2]==c2.pai[2]&&c1.pai[3]<c2.pai[3]))
	{
		cout<<"The second win!";
		return 0;
	}
}

出院

一道字符串的模拟,还是要看题!!

#include<bits/stdc++.h>
using namespace std;
const int N=105;
int n,m;
struct sss
{
	string ss;
	char a;
}s[N];
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	cin>>s[i].ss>>s[i].a;
	for(int i=1;i<=m;i++)
	{
		string sp;
		cin>>sp;
		string sf="",ssf="";
		int f=0,cnt=0;
		for(int j=1;j<=n;j++)
		{
			if(s[j].ss==sp)
			{
				f=2;
				cout<<s[j].a<<endl;
				break;
			}
		}
		if(f==2)
		continue;
		for(int j=0;j<sp.length();j++)
		{
			sf+=sp[j];
			for(int k=1;k<=n;k++)
			if(sf==s[k].ss)
			{
				ssf+=s[k].a;
				f=1;
				cnt++;
				sf="";
			}
		}
		if(f==1&&cnt<=2)
		cout<<ssf<<endl;
		else
		cout<<"D"<<endl;
	}
}

相对论大师

 这题思路很好想,用map存路径,然后一直bfs找路径,有更短的就给换了~~

主要是一开始的存入路径,我觉得这个比较重要,如下:

for(int i=1;i<=n;i++)
{
	int a,b;
	cin>>s1>>a1>>s2>>a2;
	if(!mp.count(s1))
	{
		mp[s1]=idx;
		name[idx]=s1;
		name[idx+1]=s1;
		idx+=2;
	}
	if(!mp.count(s2))
	{
		mp[s2]=idx;
		name[idx]=s2;
		name[idx+1]=s2;
		idx+=2;
	}
	if(a1==0) a=mp[s1];
	else if(a1==1) a=mp[s1]+1;
	if(a2==0) b=mp[s2];
	else if(a2==1) b=mp[s2]+1;
	add(a,b);
}

我用的是链式前向星存图,也可以用邻接表

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=2e3+5;
string s1,s2;
int a1,a2;
string name[N];
int idx;
map<string,int> mp;
int pre[N<<2];
int n;
int cnt;
int head[N<<2];
struct e
{
	int to,from;
}edge[N<<2];
void add(int a,int b)
{
	cnt++;
	edge[cnt].to=b;
	edge[cnt].from=head[a];
	head[a]=cnt;
}
vector<int> bfs(int sta,int tar)
{
	queue<int> q;
	q.push(sta);
	memset(pre,0,sizeof(pre));
	while(!q.empty())
	{
		int k=q.front();
		q.pop();
		if(k==tar)
		break;
		for(int i=head[k];i;i=edge[i].from)
		{
			int v=edge[i].to;
			if(!pre[v])
			{
				q.push(v);
				pre[v]=k;
			}
		}
	}
	vector<int> r;
	do
	{
		r.push_back(tar);
		tar=pre[tar];
	}while(tar!=0);
	return r; 
}
int main()
{
	cin>>n;
	idx=1;
	for(int i=1;i<=n;i++)
	{
		int a,b;
		cin>>s1>>a1>>s2>>a2;
		if(!mp.count(s1))
		{
			mp[s1]=idx;
			name[idx]=s1;
			name[idx+1]=s1;
			idx+=2;
		}
		if(!mp.count(s2))
		{
			mp[s2]=idx;
			name[idx]=s2;
			name[idx+1]=s2;
			idx+=2;
		}
		if(a1==0)
		a=mp[s1];
		else if(a1==1)
		a=mp[s1]+1;
		if(a2==0)
		b=mp[s2];
		else if(a2==1)
		b=mp[s2]+1;
		add(a,b);
//		cout<<s1<<" "<<a1<<" "<<mp[s1]<<" "<<name[mp[s1]]<<" "<<endl;
//		cout<<s2<<" "<<a2<<" "<<mp[s2]<<" "<<name[mp[s2]]<<" "<<endl;
	}
	vector<int> t=bfs(1,2);
	vector<int> res(N,0);
	for(int i=1;i<=idx;i+=2)
	{
		vector<int> t1=bfs(i,i+1);
		vector<int> t2=bfs(i+1,i);
		if(res.size()>t1.size()&&t1.size()>1)
		res=t1;
		if(res.size()>t2.size()&&t2.size()>1)
		res=t2;
	}
//	cout<<res.size();
//	return 0;
//	for(int i=0;i<=idx+2;i++)
//	{
//		cout<<name[i]<<" ";
//	}
//	return 0;
	for(int i=res.size()-1;i>=1;i--)
	{
		cout<<name[res[i]]<<" "<<res[i]-mp[name[res[i]]]<<" ";
		cout<<name[res[i-1]]<<" "<<res[i-1]-mp[name[res[i-1]]]<<" ";
	}
	cout<<"=";
	cout<<name[res[res.size()-1]]<<" "<<res[res.size()-1]-mp[name[res[res.size()-1]]]<<" ";
	cout<<name[res[0]]<<" "<<res[0]-mp[name[res[0]]]<<endl;
 } 

相对成功

这题是一个稍微复杂的最长不上升子序列,先对原始数据排一下,然后dp(找出以0,1为结束的最长的不上升子序列)

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int t;
int n;
int a,b;
int maxx;
int s[N];
int main()
{
	cin>>t;
	for(int i=1;i<=t;i++)
	{
		cin>>n;
		maxx=0; 
		for(int j=1;j<=n;j++)
		{
			cin>>a>>b;
			s[j]=a+1-b;
		}
		int dp[3];
		memset(dp,0,sizeof(dp));
		for(int j=1;j<=n;j++)
		{
			int x;
			cin>>x;
			for(int k=s[x];k<3;k++)
			dp[s[x]]=max(dp[s[x]],dp[k]+1);
			maxx=max(dp[s[x]],maxx);
		}
		cout<<n-maxx<<endl;
	}
}

......

相关推荐

  1. ~MAY~

    2024-05-11 05:38:02       32 阅读
  2. STL——map/unordered_map

    2024-05-11 05:38:02       32 阅读
  3. 刷题日记-May-2024

    2024-05-11 05:38:02       30 阅读
  4. c++ <span style='color:red;'>map</span>

    c++ map

    2024-05-11 05:38:02      64 阅读
  5. DSSW:MAX

    2024-05-11 05:38:02       58 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-11 05:38:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-11 05:38:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-11 05:38:02       87 阅读
  4. Python语言-面向对象

    2024-05-11 05:38:02       97 阅读

热门阅读

  1. Python注释

    2024-05-11 05:38:02       30 阅读
  2. 006 springCloudAlibaba seata

    2024-05-11 05:38:02       24 阅读
  3. 2、TS中的基础讲解

    2024-05-11 05:38:02       29 阅读
  4. Transformer优化加速--xformers

    2024-05-11 05:38:02       33 阅读
  5. tengine-docker镜像制作

    2024-05-11 05:38:02       33 阅读
  6. docker部署go项目

    2024-05-11 05:38:02       30 阅读