喜欢想飞啊,毕竟这里的题目还都算挺好的中文题,不过做英文题久了还是感觉英文题更好理解一点
题目描述
以在两周以后引起美国德克萨斯州的一场龙卷风。――蝴蝶效应
由于这个理论的存在,大多数人认为将未来的事物送回过去将会引发
严重的时间悖论,但事实上还存在另外一套理论。
自然会对这类不和谐的蝴蝶效应做出调整,具体地来说就是触发一些
小概率的恶性事件来抹杀穿越者来消除其对未来的影响。
输入描述:
输出描述:
一行,一个正整数,最初需要携带能量下限。
输入
5 1 2 5 4 2
输出
7
备注:
对于30%的数据,n,A? ≤ 5。
#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; }
题目描述
为0的奇迹,通过无限轮回成功打破了世界线收束理论。
和某民科学者不同,贝伦并不在意世界线收束的那套理论,作为奇迹
之魔女,贝伦的爱好只在于品茶。
作为品茶的消遣,贝伦正在解一道简单的谜题。
∙ 两个子序列中的数要完全一样,{1, 2} = {1, 2},{1, 2} ≠ {2, 1}。
输入描述:
输出描述:
每组数据输出一行,如果可以完成,输出Frederica Bernkastel,否则输出Furude Rika。
输入
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; }
题目描述
在完成生物课的作业。
给出一张?个点?条边的无向图,这张无向图描述了一个细胞,细胞有
细胞,或者都不是。
输入描述:
第一行,两个正整数?,?。
接下来?行,每行两个正整数?, ?描述一条无向边。
输出描述:
输出这种细胞的类型,若都不是输出NotValid。
输入
7 6 1 2 1 3 1 4 1 5 5 6 6 7
输出
X
输入
7 6 1 2 1 3 3 4 1 5 5 6 6 7
输出
Y
输入
2 1 1 2
输出
I
输入
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; }
题目描述
作为一名优秀的狙击手,????不仅经常保养枪支,也经常保养弹药。
????有?枚子弹,第?枚的型号为??,????打算扔掉其中最多?枚。
大多数优秀的狙击手都有艺术癖好,????希望扔掉一部分子弹后,最
长的连续相同子弹序列的长度尽量长。
输入描述:
第一行,两个整数?,?。
第二行,?个正整数??。
输出描述:
一行,一个整数,最长的连续相同子弹序列的长度。
输入
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; }