0
点赞
收藏
分享

微信扫一扫

蓝桥杯2020年第十一届国赛真题-奇偶覆盖

Spinach菠菜 2022-04-02 阅读 80

题目描述

在平面内有一些矩形,它们的两条边都平行于坐标轴。

我们称一个点被某个矩形覆盖,是指这个点在矩形的内部或者边界上。
请问,被奇数个矩形覆盖和被偶数(>2)个矩形覆盖的点的面积分别是多少?

输入

输入的第一行包含一个整数n,表示矩形的个数。
接下来n行描述这些矩形,其中第i行包含四个整数li,bi,ri,ti,表示矩形的两个对角坐标分别为(1i,bi)(ri,ti)。

输出

输出两行。
第一行包含一个整数,表示被奇数个矩形覆盖的点的面积。
第二行包含一个整数,表示被偶数(>2)个矩形覆盖的点的面积。

样例输入

3
1 1 3 3
2 2 4 4
3 3 5 5

样例输出

8
2

解题思路

将要放入背包的东西划分好,然后直接套用背包问题的模板

#include<bits/stdc++.h>
using namespace std;
const int N=1010;
string s1,s2;
string s11[N],s22[N];
int dp[N][N];
int main(){
	cin>>s1;
	cin>>s2;
	int l11=0,l22=0;
    //接下来划分一下字符串
	for(int i=0;s1[i];i++){
		if(s1[i]>='A'&&s1[i]<='Z')l11++;
		s11[l11]+=s1[i];
	}
	for(int i=0;s2[i];i++){
		if(s2[i]>='A'&&s2[i]<='Z')l22++;
		s22[l22]+=s2[i];
	}
	//OK,这次动态规划要比较的东西我们已经划分好了
	//接下来是愉快的套模板了
	for(int i=1;i<=l11;i++){
		for(int j=1;j<=l22;j++){
			dp[i][j]=dp[i-1][j];
			if(s11[i]==s22[j])
			dp[i][j]=max(dp[i][j],dp[i-1][j-1]+1);
			else
			dp[i][j]=max(dp[i][j],dp[i][j-1]);
		}
	} 
	cout<<dp[l11][l22];
} 
举报

相关推荐

0 条评论