20221126测试(USACO选)

T1 孤独照片【lonelyphoto】

问题描述

Farmer John 最近购入了 N 头新的奶牛(3≤N≤5×10^5),每头奶牛的品种是更赛牛(Guernsey)或荷斯坦牛(Holstein)之一。

奶牛目前排成一排,Farmer John 想要为每个连续不少于三头奶牛的序列拍摄一张照片。 然而,他不想拍摄这样的照片,其中只有一头牛的品种是更赛牛,或者只有一头牛的品种是荷斯坦牛——他认为这头奇特的牛会感到孤立和不自然。 在为每个连续不少于三头奶牛的序列拍摄了一张照片后,他把所有「孤独的」照片,即其中只有一头更赛牛或荷斯坦奶牛的照片,都扔掉了。

给定奶牛的排列方式,请帮助 Farmer John 求出他会扔掉多少张孤独的照片。如果两张照片以不同的奶牛开始或结束,则认为它们是不同的。

输入格式

输入的第一行包含 N。

输入的第二行包含一个长为 N 的字符串。如果队伍中的第 i 头奶牛是更赛牛,则字符串的第 i 个字符为 G。否则,第 i 头奶牛是荷斯坦牛,该字符为 H。

输出格式

输出 Farmer John 会扔掉的孤独的照片数量。

输入样例

5
GHGHG

输出样例

3

样例说明

这个例子中的每一个长为 3 的子串均恰好包含一头更赛牛或荷斯坦牛——所以这些子串表示孤独的照片,并会被 Farmer John 扔掉。所有更长的子串(GHGH、HGHG 和 GHGHG)都可以被接受。

测试点性质

测试点 2-4 满足 N≤50。

测试点 5-10 满足 N≤5000。

为了增加一些挑战,测试点 11 没有额外限制。注意这个测试点的答案可能无法用标准的 32 位整数型存储,你可能需要使用更大的整数类型(例如,C++ 中 64 位的 “long long int” 类型)。

分析:

暴力枚举

另加一点小优化,时间复杂度O(n2)O(n^2)O(n2),可以过前十个点。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int n;
ll ans=0;
string s;
void op(int &x,int &y,char ch){x+=(ch=='G');y+=(ch=='H');//是则为1,否则为0return;
}
int main(){freopen("lonelyphoto.in","r",stdin);freopen("lonelyphoto.out","w",stdout);cin>>n>>s;for(int i=0;i<n-2;++i){//枚举左端点int num1=0,num2=0;op(num1,num2,s[i]);op(num1,num2,s[i+1]);for(int j=i+2;j<n;++j){//枚举右端点op(num1,num2,s[j]);if(!(num1<=1||num2<=1))//如果'G'和'H'都出现了2次及以上,则跳出循环break;if(num1==1||num2==1)++ans;}}cout<<ans<<endl;fclose(stdin);fclose(stdout);return 0;
}

维护后缀中第一个和第二个某品种cow的个数

详见注释。

#include<bits/stdc++.h>
using namespace std;
#define MAXN 500010
#define ll long long
int n,c1[MAXN],c2[MAXN],c3[MAXN],c4[MAXN];
ll ans=0;//ans会爆int
string s;
int main(){freopen("lonelyphoto.in","r",stdin);freopen("lonelyphoto.out","w",stdout);cin>>n>>s;int pos1=n,pos2=n;c1[n]=c1[n+1]=c2[n]=c2[n+1]=n;for(int i=n-1;i>=0;--i){if(s[i]=='G')pos1=i;elsepos2=i;c1[i]=pos1;//c1数组记录当前下标及之后第一个'G'出现的位置c2[i]=pos2;//c2数组记录当前下标及之后第一个'H'出现的位置}for(int i=n-1;i>=0;--i){c3[i]=c1[c1[i]+1];//c3记录第二个'G'c4[i]=c2[c2[i]+1];//c4记录第二个'H'}for(int i=0;i<n;++i){ans+=max(0,c3[i]-max(c1[i],i+2));//i+2:长度最小为3,0:可能出现负数.是以s[i]开头只有一个'G'的照片数量ans+=max(0,c4[i]-max(c2[i],i+2));//以s[i]开头只有一个'H'的照片数量}cout<<ans<<endl;fclose(stdin);fclose(stdout);return 0;
}

T2 牧人游戏【herdle】

问题描述

奶牛们发明了一种名为 Herdle 的新型解谜游戏,在牛界引起了轰动。

每天都会有一个新谜题发布供奶牛解决。游戏采用 3x3 方阵的形式表示农场的一块田地,田地的每个方格都由特定品种的奶牛占据。总共只有 26 种可能的品种,每一种由 A 到 Z 中的不同大写字母标识。玩家不会被告知田地中的奶牛品种排列方式——游戏目标是通过一系列猜测确定它们。

每次猜测,奶牛们输入一个 3x3 的大写字母方阵,表示该田地可以用奶牛填充的可能方式。猜测的某些方格可能是正确的。这些方格以绿色高亮显示,让奶牛们知道这些是正确的。猜测的另一些方格可能填入了品种正确但位置错误的奶牛。这些以黄色高亮显示。

黄色高亮显示的方格的数量可以帮助指示某个品种的奶牛数量。 例如,假设猜测方阵包含 4 头品种 A 的奶牛,而答案方阵包含 2 只品种 A 的奶牛,其中没有正确位置上的 A (即,它们都不应该是绿色的)。 在这种情况下,猜测方阵中只有两个 A 应以黄色高亮显示。 更准确地说,如果猜测方阵中有 x 个特定品种的奶牛,并且 答案方阵中有 y<x 头该品种奶牛(不包括位置正确而得到绿色高亮显示的奶牛),那么猜测方阵的 x 头奶牛中只有 y 头奶牛应该以黄色高亮显示。

给定正确答案的方阵和一个表示对该答案的猜测的方阵,请计算绿色和黄色高亮显示的方格的数量。

输入格式

输入的前 3 行给定了正确答案的方阵。以下 3 行表示对该答案的猜测。

输出格式

输出两行。

输出的第一行包含应当以绿色高亮显示的方格的数量。

输出的第二行包含应当以黄色高亮显示的方格的数量。

输入样例1

COW
SAY
MOO
WIN
THE
IOI

输出样例1

1
1

样例说明1

在这个例子中,最后一行中间的 O 是正确的,所以这个方格以绿色高亮显示。字母 W 位于错误的位置,所以它以黄色高亮显示。

输入样例2

AAA
BBB
CCC
AYY
AAA
ZZZ

输出样例2

1
2

样例说明2

在这里,其中一个 A 位于正确的位置,所以它以绿色高亮显示。余下的 A 均不在正确位置上,由于答案方阵中有两个 A,所以有两个 A 应当以黄色高亮显示。

分析:

开哈希。

#include<bits/stdc++.h>
using namespace std;
char r[4][4],g[4][4];
int vh1[26],vh2[26];
int main(){freopen("herdle.in","r",stdin);freopen("herdle.out","w",stdout);for(int i=1;i<=3;++i)for(int j=1;j<=3;++j){cin>>r[i][j];++vh1[r[i][j]-'A'];//vh1记录正确方阵中出现的各字母个数}int num1=0,num2=0;for(int i=1;i<=3;++i)for(int j=1;j<=3;++j){cin>>g[i][j];++vh2[g[i][j]-'A'];//vh2记录猜的矩阵中除绿色方格外各字母出现的次数if(g[i][j]==r[i][j]){//正确,绿色--vh1[r[i][j]-'A'];--vh2[g[i][j]-'A'];++num1;//num1记录绿色数量}}for(int i=0;i<26;++i)num2+=min(vh1[i],vh2[i]);//该种类猜对了几个,若个数比正确个数多,只会有正确个数个(去掉绿色)黄色cout<<num1<<endl<<num2<<endl;fclose(stdin);fclose(stdout);return 0;
}

T3 温度调节【adjust】

问题描述

Farmer John 的 N 头奶牛对他们牛棚的室温非常挑剔。有些奶牛喜欢温度低一些,而有些奶牛则喜欢温度高一些。

Farmer John 的牛棚包含一排 N 个牛栏,编号为 1…N,每个牛栏里有一头牛。 第 i 头奶牛希望她的牛栏中的温度是 pi,而现在她的牛栏中的温度是 ti。为了确保每头奶牛都感到舒适,Farmer John 安装了一个新的空调系统。该系统进行控制的方式非常有趣,他可以向系统发送命令,告诉它将一组连续的牛栏内的温度升高或降低 1 个单位——例如「将牛栏 5…8 的温度升高 1 个单位」。一组连续的牛栏最短可以仅包含一个牛栏。

请帮助 Farmer John 求出他需要向新的空调系统发送的命令的最小数量,使得每头奶牛的牛栏都处于其中的奶牛的理想温度。

输入格式

输入的第一行包含 N。下一行包含 N 个非负整数 p1…pN,用空格分隔。最后一行包含 N 个非负整数 t1…tN。

输出格式

输出一个整数,为 Farmer John 需要使用的最小指令数量。

输入样例

5
1 5 3 3 4
1 2 2 2 1

输出样例

5

样例说明

一组最优的 Farmer John 可以使用的指令如下:

初始温度 :1 2 2 2 1

升高牛棚 2…5:1 3 3 3 2

升高牛棚 2…5:1 4 4 4 3

升高牛棚 2…5:1 5 5 5 4

降低牛棚 3…4:1 5 4 4 4

降低牛棚 3…4:1 5 3 3 4

测试点性质

测试点 2-5 满足 N≤100。

测试点 6-8 满足 N≤1000。

测试点 9-10 满足 N≤100,000。

测试点 1-6 和 9 中,温度值不超过 100。

测试点 7-8 和 10 中,温度值不超过 10,000。

(不是我不用LaTeX,是这边原题面就这样)

分析:

(谁会希望牛棚的温度是10000度和-10000度)

很典的一题。

首先需要把每个牛棚需要升降多少减出来,然后把正负分开看。

对于需要调整的温度1 5 4 6 1来说,其图像类似两个山脊间有个山谷。
如果从山谷分开算结果应为11,但先全部+1更优。
温度全部上调1单位时,变成0 4 3 5 0;2~4上调3:0 1 0 2 0。
可以看见,现在变成两个不连通块了,得要各自计算,可以想到分治
但是并不必要,可以看到,第一个山脊的高度是5,第二个山脊比前一个山谷高2。
即,“第一块”最高点为5,需要上调1+3+1次,“第二块”最高点和前面的最低点相差2,需要上调2次。
以此类推。

但是最高点找起来对于程序实现能力拉的一批的我来说简直是nightmare,所以,使用差分是最好的选择。

(一眼贪心,二眼不会,三眼暴力,四眼摆烂)

#include<bits/stdc++.h>
using namespace std;
#define MAXN 100010
#define ll long long
int n,p[MAXN],t;
ll ans=0;
int main(){freopen("adjust.in","r",stdin);freopen("adjust.out","w",stdout);cin>>n;for(int i=1;i<=n;++i)cin>>p[i];for(int i=1;i<=n;++i)cin>>t,p[i]-=t;for(int i=1;i<=n;++i){if(p[i]<0){if(p[i-1]>0)ans-=p[i];//正入负elseans+=max(0,p[i-1]-p[i]);//负,只有下降时才计算}else{if(p[i-1]>0)ans+=max(0,p[i]-p[i-1]);//正,只有上升时才计算elseans+=p[i];//负入正}}cout<<ans<<endl;fclose(stdin);fclose(stdout);return 0;
}

20221126测试(USACO选)相关推荐

  1. 20221126测试赛

    20221126测试赛 T1-孤独照片(lonelyphoto) 时间限制:1.0s 内存限制:256.0MB 输入文件名:lonelyphoto.in 输出文件名:lonelyphoto.out 试 ...

  2. visual studio 判断dropdownlist选的是什么_测试:选一顶你觉得最漂亮的皇冠。测你长了张什么脸?我是发财脸...

    测试:选一顶你觉得最漂亮的皇冠.测你长了张什么脸?我是发财脸 A. B. C. D. 选A 你长了一张冷酷脸.你是一个比较高冷的人,与其说是高冷,也可以说是比较慢热型,在面对陌生人的时候,你总是给人一 ...

  3. 测试枕头软件,360度模拟人体睡眠测试,选对枕头让睡眠一步到位

    原标题:360度模拟人体睡眠测试,选对枕头让睡眠一步到位 戴维弗林凝胶枕是享誉百年的意大利皇室至爱奢侈品牌,因为拥有先进的科技.精湛的工艺以及多位国际大师的经典设计等优势而慢慢发展壮大,针对不同睡眠习 ...

  4. 20221126测试赛解题报告

    20221126测试赛解题报告 1.孤独照片 [USACO21DEC] Lonely Photo B 题目描述 Farmer John 最近购入了 NNN 头新的奶牛(3≤N≤5×1053 \le N ...

  5. 搭建渗透测试环境选自KaliLinux无线网络渗透测试教程

    第1章搭建渗透测试环境 许多提供安全服务的机构会使用一些术语,如安全审计.网络或风险评估.以及渗透测试.这些术语在含义上有一些重叠,从定义上来看,审计是对系统或应用的量化的技术评估.安全评估意为对风险 ...

  6. 爱情指数测试脸型软件,叶罗丽测试:选一个完美的脸型,测你想成为谁的初恋女友?我是D...

    选一个完美的脸型 A. B. C. D. 答案揭晓:(此测试仅供娱乐!所有图片来源于网络) A.你想成为校草的初恋女友. 你是一个注重细节的女孩.你所做的每件事都要考虑周全,决不轻率行事.你又聪明又漂 ...

  7. 叶罗丽颜值测试软件齐娜多少分,叶罗丽测试:选一双大长腿,测你的颜值在班里能排第几名?我是A...

    <精灵梦叶罗丽>中,仙境的所有仙子都被邪恶的曼多拉女王给掌控了,凡是违抗她的仙子,都被她石化在了镜像世界里.由于野心和嫉妒的膨胀,她开始将魔爪伸向了人类世界.与此同时,为了不让曼多拉彻底毁 ...

  8. 计算机学业水平测试修选4,计算机学业测试试题复习卷4.docx

    <计算机组装与维修>学业水平测试模拟试卷 10.以下图片是( )厂商的标识 (满分100分,考试时间100 (满分100分,考试时间100分钟) 侵犯有关人员的权利 GIGABYTE A. ...

  9. 获取jQuery中的复选框值

    如何在jQuery中获取复选框的值? #1楼 尝试这个小解决方案: $("#some_id").attr("checked") ? 1 : 0; 要么 $(&q ...

最新文章

  1. 【三个臭皮匠】第一次网络会议记录
  2. Wamp与IIS同时在Windows7下运行解决方法
  3. TZOJ上的C语言作业答案,C语言编程练习
  4. JAVA_OA(八):springMVC对JDBC的操作小项目a
  5. java 初始化duration_Java 8-Duration 详解
  6. 【渝粤教育】 国家开放大学2020年春季 1443卫生信息与文献检索 参考试题
  7. requestbody前端怎么传_学习前端开发前的基础知识了解「V1001」
  8. 计算机文化基础B卷期末,《计算机文化基础》上机试卷B
  9. 统计学习方法读书笔记13-改进的迭代尺度法(优化算法)
  10. Android系统上实现类似按键精灵的效果
  11. CrossApp推出移动应用开发神器 CrossApp Style
  12. cdr添加节点快捷键_CDR快捷键大全(精编排).doc
  13. Android下载Apk安装包,下载完毕后,系统自动进行安装
  14. 一分钟先生: 程序员面试真经
  15. Java程序员笔试面试之String5
  16. 苹果开发者中心添加UDID设备教程(及获取苹果手机的UDUD)
  17. 别着急抢iPhone 13了!拍照有马赛克,苹果确认部分iPhone13存在bug
  18. AES128加密算法实现(C语言:ECB加密模式实现)
  19. 番茄助手VA_X的安装
  20. 一月17日新生冬季练习赛解题报告 A.小Q的生日

热门文章

  1. Vscode查看敲代码时长(Time Master)
  2. 怎么在期货公司中选择正规的开户?
  3. Docker日常随笔
  4. 全球集装箱港口效率排行榜公布,美国两大港口垫底,中国三大港口进入前十 | 美通社头条...
  5. ScSb的热电性质——热输运性质计算(力常数)
  6. [音乐天堂]Ce train qui s’en va 离站的火车
  7. 【JS】moment.js
  8. 计算机休眠后无法唤醒硬盘,win7系统电脑休眠后无法唤醒解决方法
  9. 怎么样让网站有一个好听的中文名称
  10. Odoo14免费开源ERP新功能预览