喵哈哈村的魔法考试 Round #9 (Div.2) 题解
A题 喵哈哈村的数据筛选游戏
题解:这道题签到题,拿个数组记录一下这个数是否出现过即可。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+5;
int vis[maxn];
int n;
int a[maxn];
int main(){
while(cin>>n){
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++){
cin>>a[i];
}
int flag = 0;
for(int i=0;i<n;i++){
if(vis[a[i]]==0){
vis[a[i]]=1;
if(flag==0){
cout<<a[i],flag=1;
}
else cout<<" "<<a[i];
}
}
cout<<endl;
}
}
B题:喵哈哈村的扔硬币游戏
题解:直接暴力更新应该也能过,这里我提倡一种前缀和的做法,每次操作的时候只要看这个点被更新了奇数次还是偶数次就好了。
前缀和的具体方式看代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+7;
int a[maxn];
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
int A,B;
scanf("%d%d",&A,&B);
a[A]++;
a[B+1]--;
}
int sum = 0;
for(int i=1;i<=n;i++){
sum+=a[i];
if(sum%2==0)printf("0");
else printf("1");
}
printf("\n");
}
C题:喵哈哈村的三角形游戏
三角插值实际上就是假设三个顶点为p1,p2,p3,那么所有三角形内的点都满足
p.x = ap1.x+bp2.x+cp3.x;
p.y = ap1.y+bp2.y+cp3.y;
a+b+c = 1
解这个方程得到a,b,c
然后再算p.w = ap1.w+bp2.w+c*p3.w即可。
判断是否在三角形内部,用计算几何的叉积或者面积法都可以。
#include<bits/stdc++.h>
using namespace std;
const double eps = 1e-6;
double x1,yy1,z1,x2,y2,z2,x3,y3,z3;
double x,y;
struct node{
double x,y;
double w;
}p[5];
double dis(node A,node B){
return sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y));
}
double area(node A,node B,node C){
double len1 = dis(A,B),len2 = dis(B,C),len3 = dis(A,C);
double p = (len1+len2+len3)/2;
return sqrt(p*(p-len1)*(p-len2)*(p-len3));
}
bool equ(double A,double B){
if(fabs(A-B)<eps)return true;
return false;
}
int main(){
while(cin>>p[0].x>>p[0].y>>p[0].w){
for(int i=1;i<3;i++)
cin>>p[i].x>>p[i].y>>p[i].w;
cin>>p[3].x>>p[3].y;
for(int i=3;i>=0;i--){
p[i].x-=p[0].x;
p[i].y-=p[0].y;
}
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){
cout<<"-1"<<endl;
continue;
}
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);
double A;
if(equ(p[1].x,0)==false)A = (p[3].x-B*p[2].x)/p[1].x;
else A = (p[3].y-B*p[2].y)/p[1].y;
printf("%.2f\n",A*p[1].w+B*p[2].w+(1.0-A-B)*p[0].w);
}
}
D:喵哈哈村的修路游戏
答案显然为连通块的数量-1,随便拿个东西算连通块的数量就好了。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e3+7;
vector<int> E[maxn];
int n,m;
int vis[maxn],cnt=0;
void dfs(int x){
vis[x]=1;
for(int i=0;i<E[x].size();i++){
if(!vis[E[x][i]])
dfs(E[x][i]);
}
}
int main(){
cin>>n>>m;
for(int i=0;i<m;i++){
int a,b;
scanf("%d%d",&a,&b);
E[a].push_back(b);
E[b].push_back(a);
}
for(int i=1;i<=n;i++){
if(!vis[i]){
cnt++;
dfs(i);
}
}
cout<<cnt-1<<endl;
}
E:喵哈哈村的打印机游戏
区间DP,dp[l][r][d]表示区间[l,r],当前底色为d的最小花费。
然后枚举中间的节点进行转移就好了,具体看代码,是一道中规中矩的区间DP题目。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 106;
int dp[maxn][maxn][maxn];
const int inf = 1e8;
string s;
int solve(int l,int r,int d){
if(l>r)return 0;
if(s[l]-'A'==d&&l==r)return dp[l][r][d]=0;
if(l==r)return dp[l][r][d]=1;
if(dp[l][r][d]!=-1)return dp[l][r][d];
dp[l][r][d]=inf;
for(int i=0;i<26;i++){
dp[l][r][d]=min(dp[l][r][d],solve(l,r,i)+1);
}
if(s[l]-'A'==d)dp[l][r][d]=min(dp[l][r][d],solve(l+1,r,d));
if(s[r]-'A'==d)dp[l][r][d]=min(dp[l][r][d],solve(l,r-1,d));
for(int i=l+1;i<r;i++){
if(s[i]-'A'==d){
dp[l][r][d]=min(dp[l][r][d],solve(l,i-1,d)+solve(i+1,r,d));
}
}
return dp[l][r][d];
}
int main(){
while(cin>>s){
memset(dp,-1,sizeof(dp));
cout<<solve(0,s.size()-1,27)<<endl;
}
}
喵哈哈村的魔法考试 Round #9 (Div.2) 题解的更多相关文章
- 喵哈哈村的魔法考试 Round #2 (Div.2) 题解
喵哈哈村的魔法考试 Round #2 (Div.2) 题解 A.喵哈哈村的战争 题解: 这道题就是for一遍,统计每个村子的战斗力的和,然后统计哪个村子的战斗力和大一点就好了. 唯一的坑点,就是这道题 ...
- 喵哈哈村的魔法考试 Round #1 (Div.2) 题解
喵哈哈村的魔法考试 Round #1 (Div.2) 题解 特别感谢出题人,qscqesze. 也特别感谢测题人Xiper和CS_LYJ1997. 没有他们的付出,就不会有这场比赛. A 喵哈哈村的魔 ...
- 喵哈哈村的魔法考试 Round #7 (Div.2) 题解
喵哈哈村的魔法考试 Round #7 (Div.2) 注意!后四道题来自于周日的hihocoder offer收割赛第九场. 我建了个群:欢迎加入qscoj交流群,群号码:540667432 大概作为 ...
- 喵哈哈村的魔法考试 Round #1 (Div.2) 题解&源码(A.水+暴力,B.dp+栈)
A.喵哈哈村的魔法石 发布时间: 2017年2月21日 20:05 最后更新: 2017年2月21日 20:06 时间限制: 1000ms 内存限制: 128M 描述 传说喵哈哈村有三种神 ...
- 喵哈哈村的魔法考试 Round #19 (Div.2) 题解
题解: 喵哈哈村的魔力源泉(1) 题解:签到题. 代码: #include<bits/stdc++.h> using namespace std; int main(){ long lon ...
- 喵哈哈村的魔法考试 Round #14 (Div.2) 题解
喵哈哈村的四月半活动(一) 题解: 唯一的case,就是两边长度一样的时候,第三边只有一种情况. #include <iostream> #include <cstdio> # ...
- 喵哈哈村的魔法考试 Round #4 (Div.2) 题解
有任何疑问,可以加我QQ:475517977进行讨论. A 喵哈哈村的嘟嘟熊魔法(1) 题解 这道题我们只要倒着来做就可以了,因为交换杯子是可逆的,我们倒着去模拟一遍就好了. 有个函数叫做swap(a ...
- 喵哈哈村的魔法考试 Round #20 (Div.2) 题解
题解: A 喵哈哈村的跳棋比赛 题解:其实我们要理解题意就好了,画画图看看这个题意.x<y,那么就交换:x>y,那么x=x%y. 如果我们经过很多次,或者y<=0了,那么就会无限循环 ...
- 喵哈哈村的魔法考试 Round #18 (Div.2) 题解
喵哈哈村的古怪石碑(一) 题解:暴力check一下是等比数列还是等差数列,然后输出答案即可.注意如果数据范围是1e9的话,就要快速幂了. 代码: #include <cstdio> #in ...
- 喵哈哈村的魔法考试 Round #13 (Div.2) 题解
喵哈哈村的木星传说(一) 旋转90°,找找规律就知道(x,y)->(n-1-y,x) 然后输出就好了. #include<bits/stdc++.h> using namespace ...
随机推荐
- (常用)time,datetime,random,shutil(zipfile,tarfile),sys模块
a.time模块import time 时间分为三种形式1.时间戳 (时间秒数的表达形式, 从1970年开始)print(time.time())start_time=time.time()time. ...
- 01 响应式页面-@media介绍,
我们为什么要写自适应的页面(响应式页面) 众所周知,电脑.平板.手机的屏幕是差距很大的,假如在电脑上写好了一个页面,在电脑上看起来不错,但是如果放到手机上的话,那可能就会乱的一塌糊涂,这时候怎么解决呢 ...
- Go语言规格说明书 之 变量声明(Variable/Short variable declarations)
go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,完整的介绍Go语 ...
- PYTHON-操作系统基础
预习:操作系统基础1,编程语言的分类2,多版本共存3,执行python程序的两种方式4,变量5,输入输出6,运算符7,基本数据类型8,流程控制之if ------------------------- ...
- web前端开发分享-css,js提高篇
一. css基础知识掌握之后(个人的标准是:弄清块元素与内联元素的区别,弄清float的应用场景,弄清position[pə'zɪʃən] 下五个属性static['stætɪk],relative[ ...
- LeetCode(46):全排列
Medium! 题目描述: 给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [ ...
- python 全栈开发,Day87(ajax登录示例,CSRF跨站请求伪造,Django的中间件,自定义分页)
一.ajax登录示例 新建项目login_ajax 修改urls.py,增加路径 from app01 import views urlpatterns = [ path('admin/', admi ...
- JavaScript实现抽象类与虚方法(六)
一:什么是js抽象类与虚方法 虚函数是类成员中的概念,是只做了一个声明而未实现的方法,具有虚函数的类就称之为抽象类,这些虚函数在派生类中才被实现.抽象类是不能实例化的,因为其中的虚函数并不是一个完整的 ...
- HDU 1029 某个数出现的次数大于等于(N+1)/2的是哪个 map水题
题意:输入n个数 n为奇数 问某个数出现的次数大于等于(N+1)/2的是 哪个 输出来Sample Input51 3 2 3 3111 1 1 1 1 5 5 5 5 5 571 1 1 1 1 1 ...
- 和组合数有关的dp
1. UVaLive 7143 Room Assignment 用dp[i][r]表示,前i个盒子已经放完了,手上还拿着r对同色球. 状态转移方程为:dp[i+1][r-a-b] = dp[i][r] ...