week12反思

反思:对于思维题的练习需要加强,这两周的重点也都在思维题,但是问题还是比较多的。感觉我的思维不是特别的灵活,需要多做题。此篇博客记录week11上面没有写出来的题目,还有就是本周的写的一些值得反思的题目。

一:week11题 

1.week11思维 - Virtual Judge

死亡笔记这道题,大概的意思就是一共几天时间,每页笔记可以记录多少字,然后给出每天必须写多少字,问当天要翻几页笔记。

思维题,要好好想如何去记录当页剩余。和如何计数。

#include<bits/stdc++.h>
using namespace std;
int a[200005];
int b[200005];
int n,m;
int main()
{
   	cin>>n>>m;
   	for(int i=1;i<=n;i++)
   	 cin>>a[i];
   	int s=m;
   	for(int i=1;i<=n;i++)
   	{
   	  if(a[i]<s)
	  {
	     b[i]=0;
		 s=s-a[i];	//注意这里,到底是s-a[i],还是m-a[i],应该是s,因为很可能当前这一页用好多天
	  }	
	  else
	  {
	  	b[i]++;
	  	int x=(a[i]-s)/m;//计算补齐上一页剩下的之后,还要写多少页
	  	b[i]=b[i]+x;
		s=m-(a[i]-s)%m;	//因为一定是重新开始的一页,所以一定是m-m-(a[i]-s)%m
	  } 
	}
	for(int i=1;i<=n;i++)
	{
		cout<<b[i]<<" ";
	}
	return 0;
}

2.week11思维 - Virtual Judge

这道题就是说,让把一个数组分成k份,但是每份相加都必须为奇数

数学里面:奇数+奇数=偶数

奇数+偶数=奇数   偶数+偶数=偶数

综合思考后,代码如下:

#include<bits/stdc++.h>
using namespace std;
int q,n,k;
int a[200005];
int main()
{
	cin>>q;
	while(q--)
	{
		int ans=0;
		cin>>n>>k;
		for(int i=1;i<=n;i++)
		{
		   cin>>a[i];
		   if(a[i]%2!=0)
		     ans++;	//看数组里面有多少奇数
		} 
		if(k%2==ans%2&&ans>=k)//细节,必须和份数同是奇数或者同为偶数才行
		{
			cout<<"YES"<<'\n';
			int cnt=0;
			int s=0;
			for(int i=1;i<=n;i++)
			{
				if(a[i]%2==1)
				{
					cnt++;
					if(cnt==k)
				    {
				    	cout<<n<<" ";
				    	break;//不加不行,会wa
					 } 
				    else
				    {
					  cout<<i<<" ";
				    }
				}	
			}
			cout<<'\n';
		}
		else cout<<"NO"<<'\n';
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值