蓝桥杯真题3

1. 统计子矩阵

在这里插入图片描述

输入:
3 4 10
1 2 3 4
5 6 7 8
9 10 11 12
输出:
19
#include<iostream>//前缀和与双指针的完美结合!!!
using namespace std;

int n,m,k;
int s[510][510];//存每一列上的前缀和
long long cnt;

int main()
{
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            scanf("%d",&s[i][j]);
            s[i][j]=s[i][j]+s[i-1][j];
        }
    }

    for(int i=1;i<=n;i++)
    {
        for(int j=i;j<=n;j++)//外两层for循环遍历行
        {
            int l=1,sum=0;
            for(int r=1;r<=m;r++)//内层for循环对列进行双指针
            {
                sum=sum+s[j][r]-s[i-1][r];
                while(sum>k)//用双指针来维护sum,使其永远小于k
                {
                    sum=sum-(s[j][l]-s[i-1][l]);
                    l++;
                }
                cnt=cnt+r-l+1;//这里要着重说明一下r-l+1是怎么来的,并不是指的这个区间,而是从r开始往前数:[r,r], [r-1,r], [r-2,r],..., [l,r], 统计的这些区间和成立
            }
        }
    }
    cout<<cnt<<endl;
    return 0;
}

2. 三升序列

在这里插入图片描述
数据

VLPWJVVNNZSWFGHSFRBCOIJTPYNEURPIGKQGPSXUGNELGRVZAG
SDLLOVGRTWEYZKKXNKIRWGZWXWRHKXFASATDWZAPZRNHTNNGQF
ZGUGXVQDQAEAHOQEADMWWXFBXECKAVIGPTKTTQFWSWPKRPSMGA
BDGMGYHAOPPRRHKYZCMFZEDELCALTBSWNTAODXYVHQNDASUFRL
YVYWQZUTEPFSFXLTZBMBQETXGXFUEBHGMJKBPNIHMYOELYZIKH
ZYZHSLTCGNANNXTUJGBYKUOJMGOGRDPKEUGVHNZJZHDUNRERBU
XFPTZKTPVQPJEMBHNTUBSMIYEGXNWQSBZMHMDRZZMJPZQTCWLR
ZNXOKBITTPSHEXWHZXFLWEMPZTBVNKNYSHCIQRIKQHFRAYWOPG
MHJKFYYBQSDPOVJICWWGGCOZSBGLSOXOFDAADZYEOBKDDTMQPA
VIDPIGELBYMEVQLASLQRUKMXSEWGHRSFVXOMHSJWWXHIBCGVIF
GWRFRFLHAMYWYZOIQODBIHHRIIMWJWJGYPFAHZZWJKRGOISUJC
EKQKKPNEYCBWOQHTYFHHQZRLFNDOVXTWASSQWXKBIVTKTUIASK
PEKNJFIVBKOZUEPPHIWLUBFUDWPIDRJKAZVJKPBRHCRMGNMFWW
CGZAXHXPDELTACGUWBXWNNZNDQYYCIQRJCULIEBQBLLMJEUSZP
RWHHQMBIJWTQPUFNAESPZHAQARNIDUCRYQAZMNVRVZUJOZUDGS
PFGAYBDEECHUXFUZIKAXYDFWJNSAOPJYWUIEJSCORRBVQHCHMR
JNVIPVEMQSHCCAXMWEFSYIGFPIXNIDXOTXTNBCHSHUZGKXFECL
YZBAIIOTWLREPZISBGJLQDALKZUKEQMKLDIPXJEPENEIPWFDLP
HBQKWJFLSEXVILKYPNSWUZLDCRTAYUUPEITQJEITZRQMMAQNLN
DQDJGOWMBFKAIGWEAJOISPFPLULIWVVALLIIHBGEZLGRHRCKGF
LXYPCVPNUKSWCCGXEYTEBAWRLWDWNHHNNNWQNIIBUCGUJYMRYW
CZDKISKUSBPFHVGSAVJBDMNPSDKFRXVVPLVAQUGVUJEXSZFGFQ
IYIJGISUANRAXTGQLAVFMQTICKQAHLEBGHAVOVVPEXIMLFWIYI
ZIIFSOPCMAWCBPKWZBUQPQLGSNIBFADUUJJHPAIUVVNWNWKDZB
HGTEEIISFGIUEUOWXVTPJDVACYQYFQUCXOXOSSMXLZDQESHXKP
FEBZHJAGIFGXSMRDKGONGELOALLSYDVILRWAPXXBPOOSWZNEAS
VJGMAOFLGYIFLJTEKDNIWHJAABCASFMAKIENSYIZZSLRSUIPCJ
BMQGMPDRCPGWKTPLOTAINXZAAJWCPUJHPOUYWNWHZAKCDMZDSR
RRARTVHZYYCEDXJQNQAINQVDJCZCZLCQWQQIKUYMYMOVMNCBVY
ABTCRRUXVGYLZILFLOFYVWFFBZNFWDZOADRDCLIRFKBFBHMAXX
#include<iostream>
#include<cstring>
using namespace std;

char s[60][60];
int ans;

int main()
{
	for(int i=0;i<30;i++)
	{
		for(int j=0;j<50;j++)
		{
			cin>>s[i][j];
		}
	}
	//按行
	for(int i=0;i<30;i++)
	{
		for(int k1=0;k1<48;k1++)
		{
			for(int k2=k1+1;k2<49;k2++)
			{
				for(int k3=k2+1;k3<50;k3++)
				{
					if((s[i][k3]-'0')-(s[i][k2]-'0')>0&&(s[i][k2]-'0')-(s[i][k1]-'0')>0) ans++;
				}
			}
		}
	} 
	//cout<<ans<<endl;
	
	//按列
	for(int i=0;i<50;i++)
	{
		for(int k1=0;k1<28;k1++)
		{
			for(int k2=k1+1;k2<29;k2++)
			{
				for(int k3=k2+1;k3<30;k3++)
				{
					if((s[k3][i]-'0')-(s[k2][i]-'0')>0&&(s[k2][i]-'0')-(s[k1][i]-'0')>0) ans++;
				}
			}
		}
	}
	//cout<<ans<<endl;
	
	//左上到右下 
	for(int i=0;i<28;i++)
	{
    	for(int x1=i,y1=0;x1<28&&y1<48;x1++,y1++)
    	{
			for(int x2=x1+1,y2=y1+1;x2<29&&y2<49;x2++,y2++)
			{
				for(int x3=x2+1,y3=y2+1;x3<30&&y3<50;x3++,y3++)
				{
					if((s[x3][y3]-'0')-(s[x2][y2]-'0')>0&&(s[x2][y2]-'0')-(s[x1][y1]-'0')>0) ans++;
				}
			}
		}
	}
	//cout<<ans<<endl;
	for(int j=1;j<48;j++)
	{
		for(int x1=0,y1=j;x1<28&&y1<48;x1++,y1++)
    	{
			for(int x2=x1+1,y2=y1+1;x2<29&&y2<49;x2++,y2++)
			{
				for(int x3=x2+1,y3=y2+1;x3<30&&y3<50;x3++,y3++)
				{
					if((s[x3][y3]-'0')-(s[x2][y2]-'0')>0&&(s[x2][y2]-'0')-(s[x1][y1]-'0')>0) ans++;
				}
			}
		}
	}
	//cout<<ans<<endl;
	//左下到右上and右上到左下 
	int flag=1;
	for(int i=29;i>=2;i--)
	{
		for(int j=0;j<48;j++)
		{
			
			for(int x1=i-1,y1=j+1;x1>=1&&y1<49;x1--,y1++)
			{
				
				for(int x2=x1-1,y2=y1+1;x2>=0&&y2<50;x2--,y2++)
				{
					if(((s[x2][y2]-'0')-(s[x1][y1]-'0')>0&&(s[x1][y1]-'0')-(s[i][j]-'0')>0)||((s[x2][y2]-'0')-(s[x1][y1]-'0')<0&&(s[x1][y1]-'0')-(s[i][j]-'0')<0)) ans++;
				}
			}
		}
	}
	cout<<ans<<endl; 
	return 0;
}

答案:180414

3. 螺旋折线

在这里插入图片描述
在这里插入图片描述

#include<iostream>
using namespace std;

long long x,y;

int main()
{
    cin>>x>>y;
    if(x+y>=0)//y=-x
    {
        if(x>y) cout<<4*x*x+(x-y)<<endl;
        else if(x<y) cout<<4*y*y-(y-x)<<endl;
        else cout<<4*x*x<<endl;
    }
    else
    {
        y=y-1;//为了使x和y关于y=x对称,这样做好处理
        if(x==y) cout<<(2*(abs(x)-1)+1)*(2*(abs(x)-1)+1)<<endl;
        else if(abs(x)<abs(y)) cout<<(2*(abs(y)-1)+1)*(2*(abs(y)-1)+1)-(x-y)<<endl;
        else cout<<(2*(abs(x)-1)+1)*(2*(abs(x)-1)+1)+(y-x)<<endl;
    }
    return 0;
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勇敢nn

心动不如行动,感谢您的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值