ACM基础题 - 求矩形个数

Posted bcbobo21cn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ACM基础题 - 求矩形个数相关的知识,希望对你有一定的参考价值。

描述

在一个3*2的矩形中,可以找到6个1*1的矩形,4个2*1的矩形3个1*2的矩形,2个2*2的矩形,2个3*1的矩形和1个3*2的矩形,总共18个矩形。

给出A,B,计算可以从中找到多少个矩形。

输入

输入2个整数A,B(1<=A,B<=1000)

输出

输出找到的矩形数。 

样例输入

1 2

3 2

样例输出

3

18


公式是:a*(a+1)*b*(b+1)/4;

4*(4+1)*5*(5+1)/4 = 150

2*(2+1)*2*(2+1)/4 = 9
 

#include <stdio.h>
#include <stdlib.h>

int main()  
  
    int a,b,i,t;  
    while(scanf("%d%d",&a,&b)!=EOF)  
      
        long long m=0,c=0;  //a=1,b=2 
        for(t=1;t<=b;t++)  //a是行,b是列 
          
            m+=t;      // m=3
          
        for(i=1;i<=a;i++)  
          
            c+=m*i;  //c=c+m*i c=3 
          
        printf("%lld\\n",c);  
      
    return 0;  
 

 

MFC实现;对话框工程;VS2012;

void CjxgsDlg::OnBnClickedButton1()

	// TODO: 在此添加控件通知处理程序代码
		CString str1, str2;
		int a,b,i,t;
		long long m=0,c=0;

		GetDlgItem(IDC_EDIT1)->GetWindowTextW(str1);
		CStringArray* result = DivString(str1);
		str2 = result->GetAt(0);
		a = _ttoi(str2);
		str2 = result->GetAt(1);
		b = _ttoi(str2);
	
        for(t=1;t<=b;t++)  //a是行,b是列 
          
            m+=t;
          
        for(i=1;i<=a;i++)  
          
            c+=m*i;  //c=c+m*i c=3 
          
        str2.Format(_T("%d"),c);
		SetDlgItemText(IDC_EDIT2,str2);


CStringArray* DivString(CString test)

	CStringArray* m_result = new CStringArray;
	while(TRUE)
	
	int index = test.Find(_T(","));
	if(index == -1)
	
	m_result->Add(test);
	return m_result;
	
	CString test1 = test.Left(index);
	m_result->Add(test1);
	test = test.Right(test.GetLength()-index-1);
	

CStringArray* DivString(CString );   这句函数声明加到对话框CPP文件的头部;这函数是按逗号切分字符串;

 

 

 

 

CStringArray* DivString(CString test) 非对话框类的成员函数,先在头部声明;

 

 

 

 

以上是关于ACM基础题 - 求矩形个数的主要内容,如果未能解决你的问题,请参考以下文章

2019年ACM银川站H题_悬线法

House Building---hdu5538(求表面积水题)

按字符个数进行编码的ACM基础题的MFC实现

ACM-数细胞

2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 Overlapping Rectangles 矩形并面积和

2018-2019 ACM-ICPC, Asia Seoul Regional Contest