week11反思

反思:这周写的题目比上周要多很多,感觉还是应该多做题,不然的话还是不太行。这篇主要是记录一下上周周赛比较好的题目,还有就是传智杯初赛的好题,好的知识点。

一:week10的好题:

一:

week10 - Virtual Judge 这道题我之所以觉得好,不是因为题目难,而是原来我没有想到的用法。就是set,其用法在我上一篇的博客有讲到。

其实就是用到如何去在set中插入一个数组,还有就是set的简单运用。

代码:

#include<bits/stdc++.h>
using namespace std;
set<vector<int> > s;
int n,l,t;
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		vector<int>a;
		cin>>l;
		for(int j=1;j<=l;j++)
		 {
		 	cin>>t;
		    a.push_back(t);
		  } 
		s.insert(a);
	}
	cout<<s.size();
	return 0;

二:第二道题目:

【深基18.例3】查找文献 - 洛谷

为啥觉得这道题特别好,就是因为,他综合使用了链表,dfs,bfs,vector的综合使用。

采用了两种方法遍历。很好理解。

代码:

#include<bits/stdc++.h>
using namespace std;
int n,m;
vector<int> g[100005];
int st[100005];
void dfs(int n)
{
	if(!st[n])
	 cout<<n<<" ";
	 st[n]=1;
	for(int i=0;i<g[n].size();i++)
	{
		if(!st[g[n][i]])
            dfs(g[n][i]);
	}
}
void bfs(int n)
{
   queue<int>q;
   q.push(n);
   st[n]=1;
   while(!q.empty())
   {
   	  int t=q.front();
   	  cout<<t<<" ";
   	  q.pop();
   	  for(int i=0;i<g[t].size();i++)
   	  {
   	  	if(st[g[t][i]]==0)
   	  	{
   	  		st[g[t][i]]=1;
   	  		q.push(g[t][i]);	
		}
	  }
   }
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0); 
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		int a,b;
		cin>>a>>b;
		g[a].push_back(b);
	}
	for(int i=1;i<=n;i++)
	  sort(g[i].begin(),g[i].end());
	dfs(1);
	memset(st,0,sizeof(st));
	cout<<'\n'; 
	bfs(1);
}

里面还是有小细节的,比如初始化数组的办法。

初始化数组

当数组a是bool类型,那么就是memset(a,false,sizeof(a));

当数组a是int类型,那么就是memset(a,0,sizeof(a));

二:传智杯的好题 

这次传智杯的题目其实相对来说都比较简单,没有考太多的语法,只有第三题考的四舍五入函数还有向上取整函数,因为之前没有见到过,因此写起来一直在卡。还有就是第五题"击鼓传花",这个我写的时候一直在卡时间,也是现在才发现好的题解。

1.首先,先说一下向上取整和向下取整,四舍五入函数吧。参考下面这个文章

取整函数(ceil、floor、round)_做一只快乐的猿-优快云博客_ceil函数 

2.击鼓传花题目:

 这个题容易卡时间,看题解,然后自己理解,写出这个宝藏题解。

题解:

#include<bits/stdc++.h>
using namespace std;
int n,m,k;
int p[10000005];
int st[10000005];
int main()
{
	cin>>n>>m>>k;
	for(int i=1;i<=m;i++)
		cin>>p[i];
	for(int i=1;i<=m;i++)
	 for(int j=1;!st[p[i]];j++)
	 {
	 	st[(p[i]+j*k)%n]=1;
	 }
	 int ans=0;
	 for(int i=0;i<n;i++)
	 {
	 	if(st[i]==0)
	 	  ans++;
	 }
	 cout<<ans;
	 return 0;	
}

 这里用到线性筛,和它能放一起学的还有素数筛,欧拉筛。下面一篇博客将会学习和总结。加油加油加油!!

完结撒花!!!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值