1.8-17:最好的草

该博客介绍了如何解决一个关于计算牧场中草丛数量的问题。给定一个牧场地图,每个位置要么是草丛(#)要么是空地(.),草丛可以是单独的或者相邻的。博客提供了一个样例输入和输出,并展示了一个简单的C++程序来解决这个问题。程序通过遍历地图并检测特定条件来计算草丛的总数。

总时间限制: 

10000ms

单个测试点时间限制: 

1000ms

内存限制: 

65536kB

描述

奶牛Bessie计划好好享受柔软的春季新草。新草分布在R行C列的牧场里。它想计算一下牧场中的草丛数量。

在牧场地图中,每个草丛要么是单个“#”,要么是有公共边的相邻两个“#”。给定牧场地图,计算有多少个草丛。

例如,考虑如下5行6列的牧场地图

.#....
..#...
..#..#
...##.
.#....

这个牧场有5个草丛:一个在第一行,一个在第二列横跨了二、三行,一个在第三行,一个在第四行横跨了四、五列,最后一个在第五行。

输入

第一行包含两个整数R和C,中间用单个空格隔开。
接下来R行,每行C个字符,描述牧场地图。字符只有“#”或“.”两种。(1 <= R, C <= 100 )

输出

输出一个整数,表示草丛数。

样例输入

5 6
.#....
..#...
..#..#
...##.
.#....

样例输出

5

来源

USACO Open 2008 Bronze

#include<bits/stdc++.h>
using namespace std;
int r,c,cnt;
char a[110][110];
int main()
{
	cin>>r>>c;
	for(int i=1;i<=r;i++)for(int j=1;j<=c;j++)cin>>a[i][j];
	for(int i=1;i<=r;i++)for(int j=1;j<=c;j++)
	{
		if(a[i][j]=='#'&&a[i][j+1]!='#'&&a[i+1][j]!='#')
		{
			cnt++;
		}
	}
	cout<<cnt;
}

<think>我们计划创建一个关于白露节气的加载页面,包含进度百分比显示,并注重美观和性能优化。设计思路:1.主题:白露节气,以白色、浅蓝色、淡黄色等清新色调为主,可以融入露珠、稻穗、月亮等元素。2.加载动画:设计一个进度条,同时显示百分比数字。为了美观,进度条可以设计成露珠滚动汇聚的效果,或者用稻穗逐渐饱满的动画。3.性能优化:使用CSS动画代替JavaScript动画以提高性能,合理使用硬件加速,确保加载过程流畅。步骤:1.HTML结构:包含一个容器,内部有进度条元素和显示百分比的元素。2.CSS样式:设计白露主题的样式,包括背景、进度条样式,以及动画效果。3.JavaScript:模拟加载进度,更新进度条宽度和百分比数字。为了深度优化:-使用requestAnimationFrame来更新进度,使动画更流畅。-使用CSS3的transform和opacity属性进行动画,因为这些属性不会引起重排,性能更好。-使用will-change属性提示浏览器对某些元素进行优化。-压缩图片资源(如果有的话),使用雪碧图或矢量图标减少HTTP请求。由于要求界面美观,我们将设计一个简洁而富有意境的加载界面。具体实现:HTML部分:<divclass="loading-container"><divclass="loading-background"></div><!--背景,可以加入一些白露相关的背景图或渐变--><divclass="progress-container"><divclass="progress-bar"></div><!--进度条--><divclass="progress-text">0%</div><!--显示百分比--></div><!--可以加入一些装饰元素,如露珠、稻穗等--><divclass="decorations"><divclass="dew-drop"></div><divclass="dew-drop"></div><divclass="dew-drop"></div></div></div>CSS部分:设计背景为渐变,模拟清晨的天空,进度条设计成露珠滚动效果或者线性渐变。装饰元素使用绝对定位,并添加动画。JavaScript部分:使用定时器模拟加载过程,更新进度条宽度和百分比数字。当达到100%后,跳转到主要内容页面。考虑到性能优化,我们将尽量使用CSS动画,并确保动画元素独立图层(使用transform:translateZ(0)或will-change)。下面给出具体代码:</think># 白露节气加载页面设计与实现 我将为您创建一个精美的白露节气加载页面,包含进度百分比显示,并进行深度优化。 ## 设计思路 1. **主题元素**:白露节气特色元素(露珠、稻穗、月光、晨雾) 2. **色彩方案**:白露主题色(白色、浅蓝、淡黄、青绿) 3. **加载动画**:露珠汇聚效果 + 稻穗生长动画 4. **性能优化**:CSS动画代替JS动画、合理使用硬件加速、减少DOM操作 ## 最终实现代码 ```html <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>白露节气加载页面</title> <style> /* 基础重置 */ * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Microsoft YaHei', 'STHeiti', sans-serif; background: linear-gradient(135deg, #e0f7fa 0%, #f5f5f5 100%); height: 100vh; overflow: hidden; position: relative; } /* 加载容器 */ .loading-container { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 90%; max-width: 600px; text-align: center; z-index: 10; } /* 标题样式 */ .title { color: #1565c0; font-size: 2.8rem; margin-bottom: 2rem; text-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); font-weight: bold; letter-spacing: 4px; position: relative; } .title::after { content: ""; position: absolute; bottom: -10px; left: 50%; transform: translateX(-50%); width: 100px; height: 3px; background: linear-gradient(90deg, transparent, #1565c0, transparent); } /* 进度容器 */ .progress-container { width: 100%; height: 12px; background-color: rgba(255, 255, 255, 0.6); border-radius: 10px; margin: 3rem 0; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); position: relative; overflow: hidden; } /* 进度条 */ .progress-bar { height: 100%; width: 0; background: linear-gradient(90deg, #4fc3f7, #0288d1, #01579b); border-radius: 10px; transition: width 0.3s ease; position: relative; overflow: hidden; } .progress-bar::after { content: ""; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.6), transparent); animation: shimmer 2s infinite; } /* 进度文本 */ .progress-text { color: #01579b; font-size: 1.5rem; font-weight: bold; margin-bottom: 2rem; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); } /* 稻穗容器 */ .rice-container { display: flex; justify-content: center; align-items: flex-end; height: 150px; margin: 2rem 0; } .rice-stem { width: 8px; height: 100px; background: linear-gradient(to bottom, #8bc34a, #33691e); position: relative; border-radius: 4px 4px 0 0; } .rice-head { position: absolute; top: -10px; left: 50%; transform: translateX(-50%); width: 60px; height: 0; background: linear-gradient(to bottom, #f9a825, #f57f17); border-radius: 30px 30px 0 0; overflow: hidden; transition: height 0.5s ease; } .rice-head::before { content: ""; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-image: radial-gradient(circle at 10px 10px, #ffd54f 2px, transparent 3px); background-size: 15px 15px; } /* 露珠动画 */ .dew-container { position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; } .dew { position: absolute; width: 15px; height: 15px; background: radial-gradient(circle at 30% 30%, rgba(255, 255, 255, 0.9), rgba(179, 229, 252, 0.7)); border-radius: 50%; filter: blur(1px); animation: dew-fall linear forwards; opacity: 0.8; } /* 背景元素 */ .moon { position: absolute; top: 10%; right: 10%; width: 80px; height: 80px; background: radial-gradient(circle, #fff9c4, #ffeb3b); border-radius: 50%; box-shadow: 0 0 30px rgba(255, 235, 59, 0.5); opacity: 0.7; } .cloud { position: absolute; background: rgba(255, 255, 255, 0.9); border-radius: 50%; filter: blur(4px); opacity: 0.7; } .cloud:nth-child(1) { top: 15%; left: 5%; width: 100px; height: 40px; } .cloud:nth-child(2) { top: 25%; right: 8%; width: 70px; height: 30px; } .cloud:nth-child(3) { bottom: 20%; left: 10%; width: 120px; height: 45px; } /* 动画定义 */ @keyframes shimmer { 0% { transform: translateX(-100%); } 100% { transform: translateX(200%); } } @keyframes dew-fall { 0% { transform: translateY(-100px); opacity: 0; } 10% { opacity: 0.8; } 90% { opacity: 0.8; } 100% { transform: translateY(100vh); opacity: 0; } } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } /* 响应式调整 */ @media (max-width: 768px) { .title { font-size: 2.2rem; } .progress-text { font-size: 1.2rem; } .moon { width: 50px; height: 50px; top: 5%; right: 5%; } } </style> </head> <body> <!-- 背景元素 --> <div class="moon"></div> <div class="cloud"></div> <div class="cloud"></div> <div class="cloud"></div> <!-- 露珠容器 --> <div class="dew-container" id="dewContainer"></div> <!-- 加载容器 --> <div class="loading-container"> <h1 class="title">白露 · 二十四节气</h1> <!-- 稻穗生长动画 --> <div class="rice-container"> <div class="rice-stem"> <div class="rice-head" id="riceHead"></div> </div> </div> <!-- 进度文本 --> <div class="progress-text" id="progressText">0%</div> <!-- 进度条 --> <div class="progress-container"> <div class="progress-bar" id="progressBar"></div> </div> <!-- 节气描述 --> <p id="seasonDesc">露从今夜白,月是故乡明</p> </div> <script> // 性能优化:使用requestAnimationFrame let lastTime = 0; const dewContainer = document.getElementById('dewContainer'); const progressBar = document.getElementById('progressBar'); const progressText = document.getElementById('progressText'); const riceHead = document.getElementById('riceHead'); const seasonDesc = document.getElementById('seasonDesc'); // 白露节气描述数组 const descriptions = [ "露从今夜白,月是故乡明", "白露秋风夜,一夜凉一夜", "凉风至,白露降,寒蝉鸣", "白露凝霜,鸿雁南翔", "白露收残暑,清风衬晚霞" ]; // 创建露珠 function createDew() { const dew = document.createElement('div'); dew.className = 'dew'; // 随机位置 const leftPos = Math.random() * 100; dew.style.left = `${leftPos}%`; // 随机动画时长(8-12秒) const duration = 8 + Math.random() * 4; dew.style.animationDuration = `${duration}s`; dewContainer.appendChild(dew); // 动画结束后移除元素 setTimeout(() => { dew.remove(); }, duration * 1000); } // 更新加载进度 function updateProgress(progress) { progressBar.style.width = `${progress}%`; progressText.textContent = `${Math.round(progress)}%`; // 稻穗生长效果 riceHead.style.height = `${progress * 0.8}px`; // 每10%更新一次描述 if (progress % 10 < 1) { seasonDesc.style.opacity = 0; setTimeout(() => { seasonDesc.textContent = descriptions[Math.floor(progress/20) % descriptions.length]; seasonDesc.style.opacity = 1; }, 300); } } // 模拟加载过程 function simulateLoading() { let progress = 0; const interval = setInterval(() => { progress += 0.5; if (progress > 100) { progress = 100; clearInterval(interval); // 加载完成后跳转或显示内容 setTimeout(() => { document.body.innerHTML = ` <div style="text-align:center; padding:50px;"> <h1 style="color:#1565c0; margin-bottom:30px;">白露节气介绍</h1> <p style="max-width:800px; margin:0 auto 20px; line-height:1.8; font-size:1.1rem;"> 白露,是二十四节气中的第15个节气,秋季第3个节气。<br> 此时天气转凉,夜晚空气中的水汽遇冷凝结成细小水滴,附着在花树木上,晨光照射下晶莹剔透,故名"白露"。 </p> <button onclick="location.reload()" style="padding:10px 25px; background:#0288d1; color:white; border:none; border-radius:5px; cursor:pointer; margin-top:30px;"> 重新体验加载动画 </button> </div> `; }, 1000); } updateProgress(progress); }, 20); } // 初始化露珠动画 function initDewAnimation(timestamp) { if (timestamp - lastTime > 200) { // 每200ms创建一个露珠 createDew(); lastTime = timestamp; } requestAnimationFrame(initDewAnimation); } // 启动 window.onload = function() { requestAnimationFrame(initDewAnimation); simulateLoading(); // 初始描述 seasonDesc.textContent = descriptions[0]; seasonDesc.style.animation = "fadeIn 1s forwards"; }; </script> </body> </html> ``` ## 设计特点与优化 ### 1. 视觉设计 - **白露主题**:使用浅蓝、青绿、淡黄等色彩营造清晨露水氛围 - **动态元素**: - 露珠下落动画(随机位置和速度) - 稻穗随加载进度生长效果 - 进度条微光流动效果 - **背景元素**:月亮、云雾等元素增强节气氛围 ### 2. 性能优化 - **CSS动画优先**:使用CSS实现露珠下落、进度条微光等效果 - **硬件加速**:对动画元素使用`transform`和`opacity`属性 - **DOM优化**:露珠元素在动画结束后移除,避免内存泄漏 - **高效渲染**:使用`requestAnimationFrame`更新动画 - **GPU加速**:对动画元素应用`will-change: transform`属性 ### 3. 用户体验 - **进度反馈**:实时显示加载百分比 - **动态提示**:随进度变化的白露节气诗词 - **响应式设计**:适配不同屏幕尺寸 - **加载完成处理**:模拟完成后显示节气介绍 ### 4. 主题深度 - 稻穗生长象征丰收,与白露节气"五谷成熟"的寓意契合 - 露珠动画直观表现"白露"名称来源 - 背景云雾和月亮营造秋夜氛围 ## 相关问题 1. 如何进一步优化加载页面的性能,特别是在低端设备上? 2. 除了稻穗和露珠,还有哪些元素可以代表白露节气? 3. 如何实现加载完成后的平滑过渡效果? 4. 在移动设备上如何确保加载动画的流畅性? 5. 如何为加载页面添加声音效果以增强用户体验?[^2] [^1]: 之前的文章个大家分享过各种类型的加载效果(Loading Effects),这里再给大家奉献一组基于单个元素实现的 CSS 加载动画集合。 [^2]: 使用 HTML、CSS 和 JavaScript 制作更多类型的小工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值