第1章蓄势待发准备篇

Posted 辉小歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第1章蓄势待发准备篇相关的知识,希望对你有一定的参考价值。

194. 抽签(挑战程序设计竞赛)【爆搜】


https://www.papamelon.com/problem/194
数据范围很小,直接爆搜即可。当然也可以写4层for循环。

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
int a[N],n,m,flag;
void dfs(int u,int sum)

	if(flag) return;
	if(u==4)
	
		if(sum==m) flag=1;
		return;
	
	for(int i=0;i<n;i++) dfs(u+1,sum+a[i]);

int main(void)

	cin>>n>>m;
	for(int i=0;i<n;i++) cin>>a[i];
	dfs(0,0);
	if(flag) puts("Yes");
	else puts("No");
	return 0;
 

192. 三角形(挑战程序设计竞赛)【枚举】


https://www.papamelon.com/problem/192

#include<bits/stdc++.h>
using namespace std;
const int N=110;
int a[N],n,ans;
void check(int a,int b,int c)

	if(a+b<=c) return;
	if(a+c<=b) return;
	if(b+c<=a) return;
	int sum=a+b+c;
	ans=max(ans,sum);

int main(void)

	cin>>n;
	for(int i=0;i<n;i++) cin>>a[i];
	for(int i=0;i<n;i++)
		for(int j=i+1;j<n;j++)
			for(int z=j+1;z<n;z++)
				check(a[i],a[j],a[z]);
	cout<<ans;

193. 蚂蚁(挑战程序设计竞赛)【思维】


https://www.papamelon.com/problem/193
其实蚂蚁a和蚂蚁b碰头,本质上就是两者就换了位置,b变成了a,a变成了b。所以撞上,可以等价于传过去。
故直接枚举,存一下最长的或最短的距离即可。

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
typedef long long int LL;
LL a[N];
int main(void)

	int t; cin>>t;
	while(t--)
	
		LL l,n; scanf("%lld%lld",&l,&n);
		for(int i=0;i<n;i++) scanf("%lld",&a[i]);
		LL minv=0,maxv=0;
		for(int i=0;i<n;i++) 
			minv=max(minv,min(a[i],l-a[i])),maxv=max(maxv,max(a[i],l-a[i]));
		cout<<minv<<" "<<maxv<<endl;
	
	return 0;

200. 抽签 II(挑战程序设计竞赛)【思维 哈希表 枚举】


https://www.papamelon.com/problem/200
分析:暴力4层for循环,时间复杂度太大了,会超时。
剪枝,用哈希表存一下所有的数,用3层的for循环,剩下的值直接查找哈希表即可。这样可不行。
再次剪枝,先预处理所有的2个数的组合,然后2层的for循环枚举,剩下的值直接差哈希表即可。

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
int a[N],n,m;
unordered_map<int,int>mp;
int main(void)

	cin>>n>>m;
	bool flag=0;
	for(int i=0;i<n;i++) cin>>a[i];
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
			mp[a[i]+a[j]]++;
	for(int i=0;i<n;i++)
	
		if(a[i]>=m) continue;
		for(int j=0;j<n;j++)
		 
			int sum=a[i]+a[j];
			if(mp[m-sum]) flag=1;
		
		if(flag) break;
	
	if(flag) puts("Yes");
	else puts("No");
	return 0;

以上是关于第1章蓄势待发准备篇的主要内容,如果未能解决你的问题,请参考以下文章

PHP学习手册的目 录

)

男人来自火星,女人来自金星2 恋爱篇

第6章 静态路由和动态路由_静态路由

Python代码阅读(第19篇):合并多个字典

第1个linux驱动___搭建环境,蓄势待发