喜欢想飞啊,毕竟这里的题目还都算挺好的中文题,不过做英文题久了还是感觉英文题更好理解一点
反蝴蝶效应
时间限制:1秒 空间限制:65536K
题目描述
一只南美洲亚马孙河流域热带雨林中的蝴蝶,偶尔扇动几下翅膀,可 以在两周以后引起美国德克萨斯州的一场龙卷风。――蝴蝶效应 由于这个理论的存在,大多数人认为将未来的事物送回过去将会引发 严重的时间悖论,但事实上还存在另外一套理论。 自然会对这类不和谐的蝴蝶效应做出调整,具体地来说就是触发一些 小概率的恶性事件来抹杀穿越者来消除其对未来的影响。
虽然听上去很荒诞,但Alicebell决定去验证这一假说,她将按1 ∼ n的
顺序依次到访过去的n个时间点。
这n个时间点各有一个能源参数A?,即到达这个时间点时,身上必须
保证有A?单位的能量,那之后将会消耗掉一单位的能量。
Alicebell想知道依次到访这n个时间点,最初需要携带至少多少能量。
输入描述:
第一行,一个正整数n。
第二行,n个正整数A?。
输出描述:
一行,一个正整数,最初需要携带能量下限。
示例1
输入
51 2 5 4 2
输出
7
备注:
对于30%的数据,n,A? ≤ 5。
对于50%的数据,n,A? ≤ 100。
对于100%的数据,n ≤ 105,1 ≤ A? ≤ 109。
上来就是秒A,做了3min交了wa,我真是个sb,只要找到权值加上当前贡献的和最大的那个就好的
#includeusing namespace std;typedef long long ll;int main(){ int n,f=0,x; scanf("%d",&n); for(int i=0; i
贝伦卡斯泰露
时间限制:1秒 空间限制:131072K
题目描述
贝伦卡斯泰露,某种程度上也可以称为古手梨花,能够创造几率近乎 为0的奇迹,通过无限轮回成功打破了世界线收束理论。 和某民科学者不同,贝伦并不在意世界线收束的那套理论,作为奇迹 之魔女,贝伦的爱好只在于品茶。 作为品茶的消遣,贝伦正在解一道简单的谜题。
给出一个长度为n的数列A?,问是否能将这个数列分解为两个长度
为n/2的子序列,满足
∙ 两个子序列不互相重叠。 ∙ 两个子序列中的数要完全一样,{1, 2} = {1, 2},{1, 2} ≠ {2, 1}。 输入描述:
第一行,一个正整数T,表示数据组数。
接下来T组数据,每组数据的第一行,一个正整数n,第二行?个正整数A?。
输出描述:
每组数据输出一行,如果可以完成,输出Frederica Bernkastel,否则输出Furude Rika。
示例1
输入
341 1 2 261 2 3 4 5 641 2 2 1
输出
Frederica BernkastelFurude RikaFurude Rika
备注:
对于30%的数据,? ≤ 16。 对于另20%的数据,? = 1。 对于另20%的数据,? = 2。 对于100%的数据,? ≤ 5,1 ≤ ?? ≤ ? ≤ 40,保证?为偶数。
这个正确的做法应该是hash之后再匹配,用队列直接模拟是不严谨的,所以反着做一次竟然对了
加入有四个相同的比较强的数据,大概还是要跪
#includeusing namespace std;int a[45];int main(){ int T; scanf("%d",&T); while(T--) { int n; scanf("%d",&n); queue 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"); else printf("Furude Rika\n"); } } return 0;}
生物课程
时间限制:1秒 空间限制:131072K
题目描述
????是一名武侦高狙击科的学生,武侦高也设有基础学科,现在她正 在完成生物课的作业。 给出一张?个点?条边的无向图,这张无向图描述了一个细胞,细胞有 如图,虚线方向的链可以无限延伸,现在需要判断给定的图是哪一种 细胞,或者都不是。
三种:X型、Y型还是I型。
输入描述:
第一行,两个正整数?,?。 接下来?行,每行两个正整数?, ?描述一条无向边。
输出描述:
输出这种细胞的类型,若都不是输出NotValid。
示例1
输入
7 61 21 31 41 55 66 7
输出
X
示例2
输入
7 61 21 33 41 55 66 7
输出
Y
示例3
输入
2 11 2
输出
I
示例4
输入
8 71 21 31 44 55 65 75 8
输出
NotValid
备注:
对于100%的数据,2 ≤ ? ≤ 500,0 ≤ ? ≤ ?*(?−1)/2,没有重边和自环。
这个D其实可以卡一些做法?大佬说要考虑单独的点,但是单独的点并不影响整个结构啊,我直接讨论了每种情况的每类点的个数就过了
#includeusing namespace std;int a[505];int main(){ int n,m; scanf("%d%d",&n,&m); for(int i=0; i
这样也过了,说明数据特别严谨,没有出现有些点没边的情况。欸不对,既然是图了,肯定每个点都有边,还是下面这个做法好啊
#includeusing namespace std;int a[505];int main(){ int n,m,f=0;; scanf("%d%d",&n,&m); for(int i=0; i
绝对半径2051
时间限制:1秒 空间限制:131072K
题目描述
????是一名狙击手,凭借肉眼视觉可以做到精确命中绝对半径2051公尺的一切目标。 作为一名优秀的狙击手,????不仅经常保养枪支,也经常保养弹药。 ????有?枚子弹,第?枚的型号为??,????打算扔掉其中最多?枚。 大多数优秀的狙击手都有艺术癖好,????希望扔掉一部分子弹后,最 长的连续相同子弹序列的长度尽量长。
输入描述:
第一行,两个整数?,?。 第二行,?个正整数??。
输出描述:
一行,一个整数,最长的连续相同子弹序列的长度。
示例1
输入
8 11 1 1 2 2 3 2 2
输出
4
备注:
对于10%的数据,? ≤ 10。 对于30%的数据,? ≤ 1000。 对于60%的数据,?? ≤ 30。 对于100%的数据,0 ≤ ? ≤ ? ≤ 105,1 ≤ ?? ≤ 109。
n个数去掉其中k个数,使相同的序列最长,我本来写的尺取回退有问题,一直在炸,还是用map维护这个尺取比较好啊
#includeusing namespace std;const int N=1e5+5;int a[N];map 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;}