A题 喵哈哈村的数据筛选游戏

题解:这道题签到题,拿个数组记录一下这个数是否出现过即可。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int maxn = 1e5+5;
  4. int vis[maxn];
  5. int n;
  6. int a[maxn];
  7. int main(){
  8. while(cin>>n){
  9. memset(vis,0,sizeof(vis));
  10. for(int i=0;i<n;i++){
  11. cin>>a[i];
  12. }
  13. int flag = 0;
  14. for(int i=0;i<n;i++){
  15. if(vis[a[i]]==0){
  16. vis[a[i]]=1;
  17. if(flag==0){
  18. cout<<a[i],flag=1;
  19. }
  20. else cout<<" "<<a[i];
  21. }
  22. }
  23. cout<<endl;
  24. }
  25. }

B题:喵哈哈村的扔硬币游戏

题解:直接暴力更新应该也能过,这里我提倡一种前缀和的做法,每次操作的时候只要看这个点被更新了奇数次还是偶数次就好了。

前缀和的具体方式看代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int maxn = 1e5+7;
  4. int a[maxn];
  5. int main(){
  6. int n,m;
  7. scanf("%d%d",&n,&m);
  8. for(int i=1;i<=m;i++){
  9. int A,B;
  10. scanf("%d%d",&A,&B);
  11. a[A]++;
  12. a[B+1]--;
  13. }
  14. int sum = 0;
  15. for(int i=1;i<=n;i++){
  16. sum+=a[i];
  17. if(sum%2==0)printf("0");
  18. else printf("1");
  19. }
  20. printf("\n");
  21. }

C题:喵哈哈村的三角形游戏

三角插值实际上就是假设三个顶点为p1,p2,p3,那么所有三角形内的点都满足

p.x = ap1.x+bp2.x+cp3.x;

p.y = a
p1.y+bp2.y+cp3.y;

a+b+c = 1

解这个方程得到a,b,c

然后再算p.w = ap1.w+bp2.w+c*p3.w即可。

判断是否在三角形内部,用计算几何的叉积或者面积法都可以。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const double eps = 1e-6;
  4. double x1,yy1,z1,x2,y2,z2,x3,y3,z3;
  5. double x,y;
  6. struct node{
  7. double x,y;
  8. double w;
  9. }p[5];
  10. double dis(node A,node B){
  11. return sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y));
  12. }
  13. double area(node A,node B,node C){
  14. double len1 = dis(A,B),len2 = dis(B,C),len3 = dis(A,C);
  15. double p = (len1+len2+len3)/2;
  16. return sqrt(p*(p-len1)*(p-len2)*(p-len3));
  17. }
  18. bool equ(double A,double B){
  19. if(fabs(A-B)<eps)return true;
  20. return false;
  21. }
  22. int main(){
  23. while(cin>>p[0].x>>p[0].y>>p[0].w){
  24. for(int i=1;i<3;i++)
  25. cin>>p[i].x>>p[i].y>>p[i].w;
  26. cin>>p[3].x>>p[3].y;
  27. for(int i=3;i>=0;i--){
  28. p[i].x-=p[0].x;
  29. p[i].y-=p[0].y;
  30. }
  31. if(equ(area(p[0],p[1],p[2]),area(p[0],p[1],p[3])+area(p[0],p[2],p[3])+area(p[1],p[2],p[3]))==false){
  32. cout<<"-1"<<endl;
  33. continue;
  34. }
  35. double B = (p[1].x*p[3].y-p[3].x*p[1].y)/(p[1].x*p[2].y-p[2].x*p[1].y);
  36. double A;
  37. if(equ(p[1].x,0)==false)A = (p[3].x-B*p[2].x)/p[1].x;
  38. else A = (p[3].y-B*p[2].y)/p[1].y;
  39. printf("%.2f\n",A*p[1].w+B*p[2].w+(1.0-A-B)*p[0].w);
  40. }
  41. }

D:喵哈哈村的修路游戏

答案显然为连通块的数量-1,随便拿个东西算连通块的数量就好了。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int maxn = 1e3+7;
  4. vector<int> E[maxn];
  5. int n,m;
  6. int vis[maxn],cnt=0;
  7. void dfs(int x){
  8. vis[x]=1;
  9. for(int i=0;i<E[x].size();i++){
  10. if(!vis[E[x][i]])
  11. dfs(E[x][i]);
  12. }
  13. }
  14. int main(){
  15. cin>>n>>m;
  16. for(int i=0;i<m;i++){
  17. int a,b;
  18. scanf("%d%d",&a,&b);
  19. E[a].push_back(b);
  20. E[b].push_back(a);
  21. }
  22. for(int i=1;i<=n;i++){
  23. if(!vis[i]){
  24. cnt++;
  25. dfs(i);
  26. }
  27. }
  28. cout<<cnt-1<<endl;
  29. }

E:喵哈哈村的打印机游戏

区间DP,dp[l][r][d]表示区间[l,r],当前底色为d的最小花费。

然后枚举中间的节点进行转移就好了,具体看代码,是一道中规中矩的区间DP题目。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int maxn = 106;
  4. int dp[maxn][maxn][maxn];
  5. const int inf = 1e8;
  6. string s;
  7. int solve(int l,int r,int d){
  8. if(l>r)return 0;
  9. if(s[l]-'A'==d&&l==r)return dp[l][r][d]=0;
  10. if(l==r)return dp[l][r][d]=1;
  11. if(dp[l][r][d]!=-1)return dp[l][r][d];
  12. dp[l][r][d]=inf;
  13. for(int i=0;i<26;i++){
  14. dp[l][r][d]=min(dp[l][r][d],solve(l,r,i)+1);
  15. }
  16. if(s[l]-'A'==d)dp[l][r][d]=min(dp[l][r][d],solve(l+1,r,d));
  17. if(s[r]-'A'==d)dp[l][r][d]=min(dp[l][r][d],solve(l,r-1,d));
  18. for(int i=l+1;i<r;i++){
  19. if(s[i]-'A'==d){
  20. dp[l][r][d]=min(dp[l][r][d],solve(l,i-1,d)+solve(i+1,r,d));
  21. }
  22. }
  23. return dp[l][r][d];
  24. }
  25. int main(){
  26. while(cin>>s){
  27. memset(dp,-1,sizeof(dp));
  28. cout<<solve(0,s.size()-1,27)<<endl;
  29. }
  30. }

喵哈哈村的魔法考试 Round #9 (Div.2) 题解的更多相关文章

  1. 喵哈哈村的魔法考试 Round #2 (Div.2) 题解

    喵哈哈村的魔法考试 Round #2 (Div.2) 题解 A.喵哈哈村的战争 题解: 这道题就是for一遍,统计每个村子的战斗力的和,然后统计哪个村子的战斗力和大一点就好了. 唯一的坑点,就是这道题 ...

  2. 喵哈哈村的魔法考试 Round #1 (Div.2) 题解

    喵哈哈村的魔法考试 Round #1 (Div.2) 题解 特别感谢出题人,qscqesze. 也特别感谢测题人Xiper和CS_LYJ1997. 没有他们的付出,就不会有这场比赛. A 喵哈哈村的魔 ...

  3. 喵哈哈村的魔法考试 Round #7 (Div.2) 题解

    喵哈哈村的魔法考试 Round #7 (Div.2) 注意!后四道题来自于周日的hihocoder offer收割赛第九场. 我建了个群:欢迎加入qscoj交流群,群号码:540667432 大概作为 ...

  4. 喵哈哈村的魔法考试 Round #1 (Div.2) 题解&源码(A.水+暴力,B.dp+栈)

    A.喵哈哈村的魔法石 发布时间: 2017年2月21日 20:05   最后更新: 2017年2月21日 20:06   时间限制: 1000ms   内存限制: 128M 描述 传说喵哈哈村有三种神 ...

  5. 喵哈哈村的魔法考试 Round #19 (Div.2) 题解

    题解: 喵哈哈村的魔力源泉(1) 题解:签到题. 代码: #include<bits/stdc++.h> using namespace std; int main(){ long lon ...

  6. 喵哈哈村的魔法考试 Round #14 (Div.2) 题解

    喵哈哈村的四月半活动(一) 题解: 唯一的case,就是两边长度一样的时候,第三边只有一种情况. #include <iostream> #include <cstdio> # ...

  7. 喵哈哈村的魔法考试 Round #4 (Div.2) 题解

    有任何疑问,可以加我QQ:475517977进行讨论. A 喵哈哈村的嘟嘟熊魔法(1) 题解 这道题我们只要倒着来做就可以了,因为交换杯子是可逆的,我们倒着去模拟一遍就好了. 有个函数叫做swap(a ...

  8. 喵哈哈村的魔法考试 Round #20 (Div.2) 题解

    题解: A 喵哈哈村的跳棋比赛 题解:其实我们要理解题意就好了,画画图看看这个题意.x<y,那么就交换:x>y,那么x=x%y. 如果我们经过很多次,或者y<=0了,那么就会无限循环 ...

  9. 喵哈哈村的魔法考试 Round #18 (Div.2) 题解

    喵哈哈村的古怪石碑(一) 题解:暴力check一下是等比数列还是等差数列,然后输出答案即可.注意如果数据范围是1e9的话,就要快速幂了. 代码: #include <cstdio> #in ...

  10. 喵哈哈村的魔法考试 Round #13 (Div.2) 题解

    喵哈哈村的木星传说(一) 旋转90°,找找规律就知道(x,y)->(n-1-y,x) 然后输出就好了. #include<bits/stdc++.h> using namespace ...

随机推荐

  1. 出现“error LNK1169: 找到一个或多个多重定义的符号”的原因

    或许,有人真的会这样写程序吧...所以才会碰到如下哥们提出的问题. https://zhidao.baidu.com/question/131426210.html 出现这种问题的原因链接中的最佳答案 ...

  2. tomcat启动报错 ERROR o.a.catalina.session.StandardManager 182 - Exception loading sessions from persiste

    系统:centos6.5 x86_64 jdk: 1.8.0_102 tomcat:8.0.37 tomcat 启动报错: ERROR o.a.catalina.session.StandardMan ...

  3. 如何把JS对象转成数组

    1. 前言 首先,当JS对象是键值对的情况时(Json对象),因为数组时以数字为索引的,所以只能把JS对象中的Key或者Value组成数组使用. 2. 样例如下: var obj={"one ...

  4. Android Menu用法全面讲解

    说明:本文只介绍Android3.0及以上的Menu知识点. 菜单的分类 菜单是Android应用中非常重要且常见的组成部分,主要可以分为三类:选项菜单.上下文菜单/上下文操作模式以及弹出菜单.它们的 ...

  5. 测试开发之前端——No6.HTML5中的键盘事件

    键盘事件 由键盘触发的事件. 适用于所有 HTML 5 元素: 属性 值 描述 onkeydown script 当按下按键时运行脚本 onkeypress script 当按下并松开按键时运行脚本 ...

  6. Mac下brew安装与配置mysql

    一.打开mac控制台 $ brew install mysql 二.启动mysql服务 $ mysql.server start 三.初始化mysql配置 1 rainMacBook-Pro:~ co ...

  7. laravel 中间件

    创建中间件命令 php artisan make:middleware CheckLogin 执行完以上命令会在app/Http/Middleware目录下创建一个新的中间件类CheckLogin.p ...

  8. poj2481树状数组解二维偏序

    按区间r降序排列,r相同按照l升序排列,两个区间相同时特判一下即可 /* 给定n个闭区间[l,r],如果对区间[li,ri],[lj,rj]来说, 有区间j严格包含(两个边界不能同时重合)在区间i内, ...

  9. ERP产品采购申请管理(三十八)

    BLL层代码: public class BioPurchaseBLL { /// <summary> /// 购进申请添加 /// </summary> /// <pa ...

  10. CSS - !important声明强制优先

    !important声明强制优先 CSS优先级中还有一个最无敌的声明,就是!important. 在CSS样式表中,带有!important声明的样式优先使用,它的优先级会超越任何地方.任何方式的样式 ...