喵哈哈村的魔法考试 Round #12 (Div.2) 题解
2017-04-09 15:57
387 查看
A
注意答案会超过int,考虑分l,r奇数和偶数来考虑即可。#include<bits/stdc++.h> using namespace std; long long l,r; int main(){ while(cin>>l>>r){ if(l%2==1){ l++; } if(r%2==1){ r--; } if(l>r){ cout<<"0"<<endl; continue; } cout<<(r-l+2)/2<<endl; } }
B
如果这个马存活下来,说明前面没有比他跑得快的。按着坐标排序,记录前缀最大值就好了。
#include<bits/stdc++.h> using namespace std; const int maxn = 1e5+7; pair<int,int> P[maxn]; int n; int main(){ while(scanf("%d",&n)!=EOF){ for(int i=1;i<=n;i++){ scanf("%d%d",&P[i].first,&P[i].second); } int Mx = -1; int Ans = 0; sort(P+1,P+1+n); for(int i=1;i<=n;i++){ if(Mx>P[i].second){ continue; } Mx = max(P[i].second,Mx); Ans++; } cout<<Ans<<endl; } }
C
dp1[i]表示以i结尾的最长上升序列,dp2[i]表示以i开头的最长下降序列。然后check一下就好了。
#include<bits/stdc++.h> using namespace std; const int maxn = 1e6+7; int d1[maxn],d2[maxn],a[maxn],n; int main(){ while(scanf("%d",&n)!=EOF){ a[0]=1e9; a[n+1]=1e9; for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=n;i++){ if(a[i]>a[i-1])d1[i]=d1[i-1]+1; else d1[i]=0; } for(int i=n;i>=1;i--){ if(a[i]>a[i+1])d2[i]=d2[i+1]+1; else d2[i]=0; } int Len = 0; int ansl=-1,ansr=-1; for(int i=1;i<=n;i++){ if(d1[i]>0&&d2[i]>0){ if(Len<d1[i]+d2[i]){ ansl=i-d1[i]-1; ansr=i+d2[i]-1; Len=d1[i]+d2[i]; }else if(Len==d1[i]+d2[i]){ if(ansl>i-d1[i]-1){ ansl=i-d1[i]-1; ansr=i+d2[i]-1; } } } } cout<<ansl<<" "<<ansr<<endl; } }
D
模拟题,做起来比较烦。理清思路去写就好了,其实只要把这个数据[[][]]过了,基本上就过了。
#include<bits/stdc++.h> using namespace std; const int maxn = 1005; string s; int d[maxn]; int main(){ while(cin>>s){ memset(d,0,sizeof(d)); for(int i=0;i<s.size();i++){ if(s[i]=='[')d[i]++; else d[i]--; } int Mx = 1; for(int i=1;i<s.size();i++){ d[i]+=d[i-1]; Mx=max(Mx,d[i]); } int len=2*Mx-1,len2=0; int flag = 0; for(int i=0;i<s.size();i++){ if(s[i]=='['){ int Flag = 0; if(flag==0){ Flag = 1; flag = 1; }else if(flag==1){ len-=2; len2++; } if(len2){ for(int j=0;j<len2-1;j++){ printf(" "); } if(Flag==0) printf("|"); else printf(" "); } printf("+"); for(int j=0;j<len;j++) printf("-"); printf("+"); if(len2){ if(Flag==0) printf("|"); } printf("\n"); }else{ int Flag = 0; if(i+1<s.size()&&s[i+1]=='['){ Flag = 1; } if(flag==1){ flag = 0; len2++; if(len2){ for(int j=0;j<len2-1;j++){ printf(" "); } printf("|"); } for(int j=0;j<len;j++) printf(" "); printf("|"); printf("\n"); printf("\n"); if(len2){ for(int j=0;j<len2-1;j++){ printf(" "); } printf("|"); } for(int j=0;j<len;j++) printf(" "); printf("|"); printf("\n"); len2--; }else{ len+=2; len2--; } if(len2){ for(int j=0;j<len2-1;j++){ printf(" "); } if(Flag==0) printf("|"); else printf(" "); } printf("+"); for(int j=0;j<len;j++) printf("-"); printf("+"); if(len2){ if(Flag==0) printf("|"); } printf("\n"); } } } return 0; }
E
简单博弈论。相当于在nn的矩阵里铺21的地砖.
所以胜利的结果显然跟n的奇偶有关.
#include<bits/stdc++.h> using namespace std; int main(){ long long n; while(cin>>n){ if(n%2==0){ cout<<"XiaoMing"<<endl; }else{ cout<<"XiaoHong"<<endl; } } }
相关文章推荐
- 喵哈哈村的魔法考试 Round #1 (Div.2) 题解
- 喵哈哈村的魔法考试 Round #10 (Div.2) 题解
- 喵哈哈村的魔法考试 Round #2 (Div.2) 题解
- 喵哈哈村的魔法考试 Round #5 (Div.2) 题解
- 喵哈哈村的魔法考试 Round #9 (Div.2) 题解
- 喵哈哈村的魔法考试 Round #11 (Div.2) 题解
- 喵哈哈村的魔法考试 Round #15 (Div.2) 题解
- 喵哈哈村的魔法考试 Round #14 (Div.2) 题解
- 喵哈哈村的魔法考试 Round #19 (Div.2) 题解
- 喵哈哈村的魔法考试 Round #13 (Div.2) 题解
- 喵哈哈村的魔法考试 Round #18 (Div.2) 题解
- 喵哈哈村的魔法考试 Round #20 (Div.2) 题解
- 喵哈哈村的魔法考试 Round #1 (Div.2) 题解&源码(A.水+暴力,B.dp+栈)
- 喵哈哈村的魔法考试 Round #4 (Div.2) 题解
- 喵哈哈村的魔法考试 Round #2 (Div.2) B.喵哈哈村的种花魔法 线段树 区间更新 单点查询
- 喵哈哈村的魔法考试 Round 16 (Div.2) 比赛题解
- 喵哈哈村的魔法考试 Round #1 (Div.2) C 喵哈哈村的魔法石(II) 背包dp
- 喵哈哈村的魔法考试 Round #3 (Div.2) 题解
- 喵哈哈村的魔法考试 Round #5 (Div.2) ABCC2
- 喵哈哈村的魔法考试 Round #7 (Div.2) 题解