标签:验证 通过 空间 can 顺序 scan com 部分 事物
喜欢想飞啊,毕竟这里的题目还都算挺好的中文题,不过做英文题久了还是感觉英文题更好理解一点
一行,一个正整数,最初需要携带能量下限。
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; }
每组数据输出一行,如果可以完成,输出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"); else printf("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; }
标签:验证 通过 空间 can 顺序 scan com 部分 事物
原文地址:http://www.cnblogs.com/BobHuang/p/7643914.html