2021.12.7总结

刷了vj上三个题,写了食品安全的期末作业,看了尺取(挺有意思)

一、预备役中期测试(羊驼) [补题] - Virtual Judge (vjudge.net)

思路:B是礼物,只需要计算有B的外面有几个括号,从左边开始计算左括号有几个,右括号有几个,遇到'B'就结束,左右括号相减就能得到拆了几层。

AC代码:

#include<stdio.h>
int main()
{
	 char s[1010];
	 int i;
	while(gets(s))
	{
		int x=0,y=0;
	 for(i=0;s[i];i++)
	 {
	 	if(s[i]=='(')
	 	  x++;
	 	  if(s[i]==')')
	 	  y++;
	 	  if(s[i]=='B')
	 	   break;
	 }
	 int t=x-y;
	 printf("%d\n",t);
    }
}

二、预备役中期测试(羊驼) [补题] - Virtual Judge (vjudge.net)

思路:这个题开始的时候我是看它有几种情况,但是还是会漏掉个别情况,然后我问了个大佬,他就跟我讲了一下这是个数学思维题,至少一个c和至少一个n的时候找最小值,考虑(c+n+m)/3就能解决。

AC代码:

#include <stdio.h>
int main()
{
	int q, c, n, m,min,x;
 scanf("%d",&q);
 while (q--)
{
 scanf("%d%d%d",&c,&n,&m);
 x=(c+n+m)/3;
 min=c<n?c:n;
 min=min<x?min:x;
printf("%d\n",min);
}
 return 0;
}

三、

预备役中期测试(羊驼) [补题] - Virtual Judge (vjudge.net)

思路:根据提示可知分三种情况,第一种的时候n等于1,最小周长一定是4.第二种,你开平方后,平方乘以平方还等于n,最小周长就是4*n的开平方。最后一种就是两个数相乘等于n,其边长相加最小(如:1*13=13,周长:1+1+13+13=28  1*16=16 周长:1+1+16+16=24 2*8=16 周长2+2+8+8=20 4*4=16 4+4+4+4=16(最小))找最小。

AC代码:

#include<stdio.h>
#include<math.h>
int main()
{
	int n,x,i,j,min;
	scanf("%d",&n);
	int t=sqrt(n);
	if(n==1) printf("4");
	else if((t*t)==n) printf("%d",4*t);
   else
   {
   	 min=(1+1+n+n);
   	  for(i=2;i<=n;i++)
   	  {
   	  	   if(n%i==0)
   	  	   {
   	  	   	  if(min>(i+n/i)*2)
   	  	   	    min=(i+n/i)*2; 
				}
		 }
		 printf("%d",min);
   }
}

四、它叫“尺取”,我总以为是”尽取“,像在尺子(刻度固定,长度可任意缩减)上截取某一段,这是针对需要在给的一组数据中找到不大(小)于某一个上限的“最优连续子序列“的一种算法,利用双指针i,j移动得到这样的一个值。

代码:

#include<cstdio>
#include<algorithm>
#include<iostream>
typedef long long ll;
using namespace std;
 int main()
{
	int ans,i,j,a[200],sum,n,max;
	scanf("%d%d",&n,&max);
	for(i=0;i<n;i++)
		scanf("%d",&a[i]);
	i=0;
	j=0;
	sum=0;
	ans=n+1;//默认长度为最大长度 
	while(1)
	{
		while(j<n&&sum<max)//j移动不能超过给定长度,但这个sum序列的和大于(小于)所求 值时结束循环 
			sum+=a[j++];//记录连续序列的和 
		if(sum<max)	break;//所有数都计算完了还是不符合要求则跳出循环。 
		ans=min(ans,j-i);//找最小长度 
		sum-=a[i++];//sum的和依次从头开始减掉,i向前移动 
	}
	printf("%d\n",ans);
	return 0;
}

这两天有好几篇作文要写,所以学的比较少,明天要开始巩固新星杯的知识了。不要太着急,学会了最重要!!!

      明日计划:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值