Wannafly模拟赛3

2024-03-11 03:20
文章标签 模拟 wannafly

本文主要是介绍Wannafly模拟赛3,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

喜欢想飞啊,毕竟这里的题目还都算挺好的中文题,不过做英文题久了还是感觉英文题更好理解一点

反蝴蝶效应
时间限制:1秒 空间限制:65536K

题目描述

一只南美洲亚马孙河流域热带雨林中的蝴蝶,偶尔扇动几下翅膀,可
以在两周以后引起美国德克萨斯州的一场龙卷风。――蝴蝶效应
由于这个理论的存在,大多数人认为将未来的事物送回过去将会引发
严重的时间悖论,但事实上还存在另外一套理论。
自然会对这类不和谐的蝴蝶效应做出调整,具体地来说就是触发一些
小概率的恶性事件来抹杀穿越者来消除其对未来的影响。
虽然听上去很荒诞,但Alicebell决定去验证这一假说,她将按1 ∼ n的
顺序依次到访过去的n个时间点。
这n个时间点各有一个能源参数A?,即到达这个时间点时,身上必须
保证有A?单位的能量,那之后将会消耗掉一单位的能量。
Alicebell想知道依次到访这n个时间点,最初需要携带至少多少能量。

输入描述:

第一行,一个正整数n。
第二行,n个正整数A?。

输出描述:

一行,一个正整数,最初需要携带能量下限。
示例1

输入

5
1 2 5 4 2

输出

7

备注:

对于30%的数据,n,A? ≤ 5。
对于50%的数据,n,A? ≤ 100。
对于100%的数据,n ≤ 105,1 ≤ A? ≤ 109。
上来就是秒A,做了3min交了wa,我真是个sb,只要找到权值加上当前贡献的和最大的那个就好的
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{int n,f=0,x;scanf("%d",&n);for(int i=0; i<n; i++){scanf("%d",&x);if(f-(i+1+x)<0)f=x+i;}printf("%d",f);return 0;
}
贝伦卡斯泰露
时间限制:1秒 空间限制:131072K

题目描述

贝伦卡斯泰露,某种程度上也可以称为古手梨花,能够创造几率近乎
为0的奇迹,通过无限轮回成功打破了世界线收束理论。
和某民科学者不同,贝伦并不在意世界线收束的那套理论,作为奇迹
之魔女,贝伦的爱好只在于品茶。
作为品茶的消遣,贝伦正在解一道简单的谜题。
给出一个长度为n的数列A?,问是否能将这个数列分解为两个长度
为n/2的子序列,满足
∙ 两个子序列不互相重叠。
∙ 两个子序列中的数要完全一样,{1, 2} = {1, 2},{1, 2} ≠ {2, 1}。

输入描述:

第一行,一个正整数T,表示数据组数。
接下来T组数据,每组数据的第一行,一个正整数n,第二行?个正整数A?。

输出描述:

每组数据输出一行,如果可以完成,输出Frederica Bernkastel,否则输出Furude Rika。
示例1

输入

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

输出

Frederica Bernkastel
Furude Rika
Furude Rika

备注:

对于30%的数据,? ≤ 16。
对于另20%的数据,? = 1。
对于另20%的数据,? = 2。
对于100%的数据,? ≤ 5,1 ≤ ?? ≤ ? ≤ 40,保证?为偶数。

这个正确的做法应该是hash之后再匹配,用队列直接模拟是不严谨的,所以反着做一次竟然对了

加入有四个相同的比较强的数据,大概还是要跪

#include<bits/stdc++.h>
using namespace std;
int a[45];
int main()
{int T;scanf("%d",&T);while(T--){int n;scanf("%d",&n);queue<int>Q;for(int i=1; i<=n; i++){scanf("%d",&a[i]);if(Q.empty())Q.push(a[i]);else{if(Q.front()==a[i])Q.pop();else Q.push(a[i]);}}if(Q.empty())printf("Frederica Bernkastel\n");else{while(!Q.empty())Q.pop();for(int i=n; i>0; i--){if(Q.empty())Q.push(a[i]);else{if(Q.front()==a[i])Q.pop();else Q.push(a[i]);}}if(Q.empty())printf("Frederica Bernkastel\n");elseprintf("Furude Rika\n");}}return 0;
}
生物课程
时间限制:1秒 空间限制:131072K

题目描述

????是一名武侦高狙击科的学生,武侦高也设有基础学科,现在她正
在完成生物课的作业。
给出一张?个点?条边的无向图,这张无向图描述了一个细胞,细胞有
三种:X型、Y型还是I型。
如图,虚线方向的链可以无限延伸,现在需要判断给定的图是哪一种
细胞,或者都不是。

输入描述:

第一行,两个正整数?,?。
接下来?行,每行两个正整数?, ?描述一条无向边。

输出描述:

输出这种细胞的类型,若都不是输出NotValid。
示例1

输入

7 6
1 2
1 3
1 4
1 5
5 6
6 7

输出

X
示例2

输入

7 6
1 2
1 3
3 4
1 5
5 6
6 7

输出

Y
示例3

输入

2 1
1 2

输出

I
示例4

输入

8 7
1 2
1 3
1 4
4 5
5 6
5 7
5 8

输出

NotValid

备注:

对于100%的数据,2 ≤ ? ≤ 500,0 ≤ ? ≤ ?*(?−1)/2,没有重边和自环。

这个D其实可以卡一些做法?大佬说要考虑单独的点,但是单独的点并不影响整个结构啊,我直接讨论了每种情况的每类点的个数就过了

#include <bits/stdc++.h>
using namespace std;
int a[505];
int main()
{int n,m;scanf("%d%d",&n,&m);for(int i=0; i<m; i++){int x,y;scanf("%d%d",&x,&y);a[x]++,a[y]++;}int f1=0,f2=0,f3=0,f4=0;for(int i=1;i<=n;i++){if(a[i]==1)f1++;else if(a[i]==2)f2++;else if(a[i]==3)f3++;else if(a[i]==4)f4++;}if(f4==1&&f1==4&&f2==n-5)printf("X");else if(f3==1&&f1==3&&f2==n-4)printf("Y");else if(f2==n-2&&f1==2)printf("I");else printf("NotValid");return 0;
}

这样也过了,说明数据特别严谨,没有出现有些点没边的情况。欸不对,既然是图了,肯定每个点都有边,还是下面这个做法好啊

#include <bits/stdc++.h>
using namespace std;
int a[505];
int main()
{int n,m,f=0;;scanf("%d%d",&n,&m);for(int i=0; i<m; i++){int x,y;scanf("%d%d",&x,&y);a[x]++,a[y]++;}for(int i=1;i<=n;i++)if(a[i]==1)f++;if(f==4)printf("X");else if(f==3)printf("Y");else if(f==2)printf("I");else printf("NotValid");return 0;
}
绝对半径2051
时间限制:1秒 空间限制:131072K

题目描述

????是一名狙击手,凭借肉眼视觉可以做到精确命中绝对半径2051公尺的一切目标。
作为一名优秀的狙击手,????不仅经常保养枪支,也经常保养弹药。
????有?枚子弹,第?枚的型号为??,????打算扔掉其中最多?枚。
大多数优秀的狙击手都有艺术癖好,????希望扔掉一部分子弹后,最
长的连续相同子弹序列的长度尽量长。

输入描述:

第一行,两个整数?,?。
第二行,?个正整数??。

输出描述:

一行,一个整数,最长的连续相同子弹序列的长度。
示例1

输入

8 1
1 1 1 2 2 3 2 2

输出

4

备注:

对于10%的数据,? ≤ 10。
对于30%的数据,? ≤ 1000。
对于60%的数据,?? ≤ 30。
对于100%的数据,0 ≤ ? ≤ ? ≤ 105,1 ≤ ?? ≤ 109。

n个数去掉其中k个数,使相同的序列最长,我本来写的尺取回退有问题,一直在炸,还是用map维护这个尺取比较好啊

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N];
map<int,int> M;
int main()
{int n,k;scanf("%d%d",&n,&k);for (int i=1; i<=n; i++)scanf("%d",&a[i]);int i=1,j=1,ans=1;while (i<=n){while (j<=n&&j-i-M[a[i]]<=k)M[a[j++]]++;ans=max(ans,M[a[i]]);M[a[i++]]--;while (i<=n&&a[i]==a[i-1])M[a[i++]]--;}printf("%d\n",ans);return 0;
}

 

转载于:https://www.cnblogs.com/BobHuang/p/7643914.html

这篇关于Wannafly模拟赛3的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/796445

相关文章

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

usaco 1.2 Transformations(模拟)

我的做法就是一个一个情况枚举出来 注意计算公式: ( 变换后的矩阵记为C) 顺时针旋转90°:C[i] [j]=A[n-j-1] [i] (旋转180°和270° 可以多转几个九十度来推) 对称:C[i] [n-j-1]=A[i] [j] 代码有点长 。。。 /*ID: who jayLANG: C++TASK: transform*/#include<

hdu4431麻将模拟

给13张牌。问增加哪些牌可以胡牌。 胡牌有以下几种情况: 1、一个对子 + 4组 3个相同的牌或者顺子。 2、7个不同的对子。 3、13幺 贪心的思想: 对于某张牌>=3个,先减去3个相同,再组合顺子。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOExcepti

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

【算法专场】模拟(下)

目录 前言 38. 外观数列 算法分析 算法思路 算法代码 1419. 数青蛙 算法分析 算法思路 算法代码  2671. 频率跟踪器 算法分析 算法思路 算法代码 前言 在前面我们已经讲解了什么是模拟算法,这篇主要是讲解在leetcode上遇到的一些模拟题目~ 38. 外观数列 算法分析 这道题其实就是要将连续且相同的字符替换成字符重复的次数+

模拟实现vector中的常见接口

insert void insert(iterator pos, const T& x){if (_finish == _endofstorage){int n = pos - _start;size_t newcapacity = capacity() == 0 ? 2 : capacity() * 2;reserve(newcapacity);pos = _start + n;//防止迭代

PHP实现二叉树遍历(非递归方式,栈模拟实现)

二叉树定义是这样的:一棵非空的二叉树由根结点及左、右子树这三个基本部分组成,根据节点的访问位置不同有三种遍历方式: ① NLR:前序遍历(PreorderTraversal亦称(先序遍历)) ——访问结点的操作发生在遍历其左右子树之前。 ② LNR:中序遍历(InorderTraversal) ——访问结点的操作发生在遍历其左右子树之中(间)。 ③ LRN:后序遍历(PostorderT

1 模拟——67. 二进制求和

1 模拟 67. 二进制求和 给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。 示例 1:输入:a = "11", b = "1"输出:"100"示例 2:输入:a = "1010", b = "1011"输出:"10101" 算法设计 可以从低位到高位(从后向前)计算,用一个变量carry记录进位,如果有字符没处理完或者有进位,则循环处理。两个字符串对

AMAZING AUCTION(简单模拟)

AMAZING AUCTION 时间限制: 3000 ms  |  内存限制: 65535 KB 难度:4 描述 Recently the auction house hasintroduced a new type of auction, the lowest price auction. In this new system,people compete for the lo