Codeforces Round #662 (Div. 2)补题

A.

补题过程:说实话今天找规律还是花了好长时间,因为例子好少,直接看不出来就只能从题目上下手,但这次题目说的好模糊看不懂(苦笑),结果发现还是要自己找规律,题目就说了一个要求不同的网格相邻。

找规律:首先涂最外面的一圈,涂最外面的一圈一次后,我们开始涂第二次,但这个时候由于我们要求的是最小的圈,所以在涂第二次的时候,我们把最外面的一圈剩下的涂满,还要再往里把倒数第二层涂一次,然后以此类推。

结果:最外面的一层2次,其余1次,因为每层之间n差了2,所以对于总层数n我们可以知道有(n/2-1)个1次,1个2次,相加起来就是n/2+1,从而得出公式。

AC代码:

#include <cstdio>
#include<iostream>
#include<cstring>
#include <algorithm>
using namespace std;
int main()
{
	int n;
	cin>>n;
    while(n--)
	{
		int t;
		cin>>t;
		cout<<t/2+1<<endl;
	 } 
	return 0;
} 
	
 

B.

题意:我们有n根各种长度的木棒,经过q次增加一根或减少某根长度的木棒后,求每次增减操作后能否用这些木棒构造出一个长方形和正方形。

注意:每个图形的边只用一个木棒!(开始以为多个木棒也可以,结果直接wrong在test 2上了。)

思路:

通过的方向就两种,第一种是一个正方形,一个长方形;第二种两个正方形。所以我们定两个数据来判断,sum1和sum2.sum1用来记录4个相同长度木棒的组数(4个一组),sum2用来记录去掉一组sum1中的组数之后,2个相同长度木棒的组数(2个一组),如果sum1>=2或sum1==1并且sum2>=2.

ps:如果不去掉sum1的一组的话,直接把sum2设置为所有木棒中2个相同长度的组数,sum2>=4即可,后来尝试了一下也可以。

AC代码:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int a[100005];
int main()
{
	int n,i,sum1=0,sum2=0,q,w;
    cin>>n;
    for(i=0;i<n;i++)
    {
        cin>>w;
        if(a[w]%4+1==4) 
		{
		 sum1++;
		 sum2--;
	    }
        else 
		{
		  if(a[w] % 4 + 1 == 2) 
		  {
		    sum2++;
	      }
	    }
        a[w]++;
    }
    cin>>q;
    while(q--)
    {
        char c;
        cin>>c>>w;
        if(c=='+')
        {
            if(a[w]%4+1==4) 
			{
			  sum1++;
			  sum2--;
		    }
            else 
			{
			 if(a[w]%4+1==2) 
			 {
			  sum2++;
			 }
			}
            a[w]++;
        }
        else
        {
            if(a[w]%4==0) 
			{
			  sum1--;
			  sum2++;
		    }
            else 
			{
	          if(a[w] % 4 == 2) 
			 {
			   sum2--;
		     }
		    }
            a[w]--;
        }
        if(sum1>=2||(sum1==1&&sum2>=2))
		{
		  cout<<"YES"<<endl;
		}
		else
		{
		 cout<<"NO"<<endl;
	    }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值