第四次周赛

A - Overturned Numbers URAL - 2031
思路:先列举1-99所有符合题意的数,翻转后排序,之后判断是否有符合n的连续序列,符合的话翻转(按翻转前从大到小的顺序!!!)输出。

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;

int p[99];  //储存翻转数

int main()
{
	int numi = 4;
	p[0] = 10; p[1] = 90; p[2] = 80; p[3] = 60;
	for (int i = 11; i < 100; ++i)
	{
		int baiwei=i/10;
		int gewei=i%10;
		if ((baiwei == 1 ||baiwei ==  6 ||baiwei ==  8 ||baiwei ==  9 ||baiwei ==  0 )&&( gewei == 1 ||gewei == 6 ||gewei == 8 ||gewei == 9 ||gewei == 0))
		{
			if (baiwei == 6) baiwei = 9;
			else if (baiwei == 9) baiwei = 6;
			if (gewei == 6) gewei = 9;
			else if (gewei == 9) gewei = 6;
			int a = baiwei;
			baiwei = gewei;
			gewei = a;
			p[numi++] = baiwei * 10 + gewei;
		}
	}
	sort(p, p + numi );
	int n;
	cin >> n;
	int ans[99]; int start = 6;
	int N = 1; ans[0] = 6; int judge = 0;
	for (int i = 1; i < numi; ++i)
	{
		if (N == n)
		{
			judge = 1;
			break;
		}

		if (p[i] == start + N)
		{
			ans[N] = p[i];
			++N;
		}
		else
		{
			start = p[i];
			ans[0] = start;
			N = 1;
		}
	}
	if (judge == 1)
	{
		for (int i = n-1; i >=0; --i)  //注意逆序输出
		{
			if (ans[i] == 1) cout << 10;
			else if (ans[i] == 6) cout << 90;
			else if (ans[i] == 9) cout << 60;
			else if (ans[i] == 8) cout << 80;
			else
			{
				int baiwei = ans[i] / 10;
				int gewei = ans[i] % 10;
				if (baiwei == 6) baiwei = 9;
				else if (baiwei == 9) baiwei = 6;
				if (gewei == 6) gewei = 9;
				else if (gewei == 9) gewei = 6;
				int a = baiwei;
				baiwei = gewei;
				gewei = a;
				int x= baiwei * 10 + gewei;
				if (x < 10) cout << 0 << x;
				else cout << x;

			}
			if (i != 0) cout << ' ';
		}
	}
	else
	{
		cout << "Glupenky Pierre";
	}
}

D - The E-pang Palace HDU - 5128

思路:矩形有两种符合题意的位置关系:相离,包含(边缘不重合)(这是一个坑!!!),相离的面积为两者之和,包含的面积为大矩形的面积!!!

ac代码:
#include <iostream>
#include <algorithm> 
using namespace std;

int map[205][205];
int p[100][2];

struct rectangle
{
	int l, r, u, d;
}q[100];

int main()
{
	int n;
	while (cin >> n, n)
	{
		int a, b;
		memset(q, 0, sizeof(q));
		memset(map, 0, sizeof(map));
		for (int i = 0; i < n; ++i)
		{
			cin >> a >> b;
			map[a][b] = 1;
			p[i][0] = a;
			p[i][1] = b;
		}
		int N = 0;
		for (int i = 0; i < n; ++i)  //任取两个点判断能否构成矩形//会出现重复情况,故N比实际大,无影响
		{
			for (int t = 0; t < n; ++t)
			{
				if (p[i][0] != p[t][0]&&p[i][1]!=p[t][1])
				{
					if (map[p[i][0]][p[t][1]] == 1 && map[p[t][0]][p[i][1]] == 1)  //能构成矩形//注意别写成map[p[i][0]][p[t][1]] == 1 && map[p[i][1]][p[t][0]] == 1
					{
					// 	cout << p[i][0] << ' ' << p[i][1] << "   " << p[t][0] << ' ' << p[t][1] << endl;//test
						q[N].r = max(p[i][0], p[t][0]); q[N].l = min(p[i][0], p[t][0]); 
						q[N].d = max(p[i][1], p[t][1]); q[N].u = min(p[i][1], p[t][1]);//cout << q[N].l << q[N].r << q[N].u << q[N].d << endl;
						++N;
					}
				}
			}
		}
		if (N < 2) cout << "imp" << endl;
		else
		{
			int sum = 0;
			for (int i = 0; i < N-1; ++i)  //任取两个矩形判断是否符合题意
			{
				for (int t = i + 1; t < N; ++t)
				{
					int map2[205][205];
					memset(map2, 0, sizeof(map2));
					for (int j = q[i].u; j <= q[i].d; ++j)  //构图//
					{
						for (int v = q[i].l; v <= q[i].r; ++v)
						{
						//	map2[j][v]++;
							if (j == q[t].u || j == q[t].d) map2[j][v]++;
							if (((v == q[t].l) || v == q[t].r)&&j != q[t].u&&j != q[t].d) map2[j][v]++;
						}
					}
					for (int j = q[t].u; j <= q[t].d; ++j)  //构图//
					{
						for (int v = q[t].l; v <= q[t].r; ++v)
						{
						//	map2[j][v]++;
							if (j == q[t].u || j == q[t].d) map2[j][v]++;
							if (((v == q[t].l) || v == q[t].r) && j != q[t].u&&j != q[t].d) map2[j][v]++;
						}
					}
				/*	cout << endl; //test
					for (int j = q[i].u; j <= q[i].d; ++j)  //test
					{
						for (int v = q[i].l; v <= q[i].r; ++v)
						{
							if((v == q[i].l) ||( v == q[i].r) ||( j == q[i].u )||( j == q[i].d))
								cout << map2[j][v] << ' ';
							else cout << "  ";
						}cout << endl;
					}cout << endl;*/
					int judge = 1;
					for (int j = q[i].u; j <= q[i].d; ++j)  //判断是否相交或重合
					{
						for (int v = q[i].l; v <= q[i].r; ++v)
						{
						//	if (j == q[i].a || j == q[i].c || v == q[i].a || v == q[i].c)
							{
								if ((((v == q[i].l) || v == q[i].r) || j == q[i].u||j == q[i].d)&&map2[j][v] ==2)
								{
									judge = 0;
									break;
								}
							}
						}
						if (judge == 0) break;
					}
					if (judge == 1)
					{
						int tempsum;
						int qisum = (q[i].d - q[i].u)*(q[i].r - q[i].l);
						int qtsum = (q[t].d - q[t].u)*(q[t].r - q[t].l);
						if ((q[i].l > q[t].l&&q[i].r<q[t].r&&q[i].u>q[t].u&&q[i].d < q[t].d) || (q[i].l < q[t].l&&q[i].r > q[t].r&&q[i].u < q[t].u&&q[i].d > q[t].d))  //包含的情况
							tempsum = max(qisum, qtsum);
						else tempsum = (q[i].d - q[i].u)*(q[i].r - q[i].l ) + (q[t].d - q[t].u )*(q[t].r - q[t].l );
						if (tempsum > sum) sum = tempsum;
					}
				}
			}
			if (sum == 0) cout << "imp" << endl;
			else cout << sum << endl;
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
水利改革发展 中国政府高度重视水利建设,将水利作为国家基础设施建设的优先领域。政策文件强调了防洪抗旱、水资源管理、水环境保护和水生态修复等方面的全面要求,推动了水利信息化的发展。 智慧水利建设目标 智慧水利的建设目标是通过数据共享、应用惠民、应急预警等手段,打破信息孤岛,提升应急抢险协作能力,加强水利数据在惠民信息化方面的应用。同时,提出了共享联动化、解决信息安全问题、提高水利信息科技创新能力等目标。 智慧水利建设模式 智慧水利的建设模式包括构建统一平台、数据中心、信息整合平台、决策支持系统等,以实现水利、海洋、环保等政府部门和公众的信息共享和服务。此外,还包括了云计算虚拟化、网络传输、采集工程等多个方面的技术应用。 智慧水利应用实例 智慧水利的应用实例包括视频水文工程监控、多要素一体化检测设备、汛情预警智能联动、三防决策指挥、河长综合信息展示等。这些应用通过集成GIS、互联网地图服务、物联网设备等技术,实现了对水利设施的实时监控、数据分析和应急响应。 成功案例与展望 智慧水利的成功案例展示了通过视频监控、预警信息发布、移动办公信息APP等技术,有效提升了灾害应对能力、水资源管理和河长制的实施效果。这些案例表明,智慧水利的建设不仅提高了水利管理的效率和水平,也为未来的水利信息化发展提供了方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

浅若清风cyf

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值