<>

427. 学姐逗学弟

时间限制 3000 ms 内存限制 131072
KB

题目描述

学弟们来了之后,学姐每天都非常高兴的和学弟一起玩耍。这一天,学姐想出了这样一个游戏,她画了一棵树,树上共有n个节点,现在学姐把m(m≤n)个石子随机放在节点上,每个节点可以放多个,每一次操作是指把每一个节点上的所有石子都往下移动到他某一个子节点(一个节点有多个石子可以分别移动到不同子节点),如果没有子节点则不移动,无法移动的人输。
学姐说,学弟是绅士应该让学姐先走,其实学姐已经策划好了自己一定会赢,但是这时学弟说,学姐先下那么我来画树和放石子吧,学姐惊呆了。现在她来想知道在新的图上,两人都按最优方案走,自己还能不能赢。

输入格式

输入第一行为一个整数T表示数据组数,接下来T组数据,每组开头为两个整数n,m,表示节点个数和石子个数,1≤m≤n≤100000,接下来一行n−1个整数,表示2到n节点的父亲节点编号,接下来一行m个整数,表示每一个石子的位置。数据保证1为根节点。

输出格式

如果学姐能胜利,输出"MengMengDa!",否则输出"So sad..."。没有引号。

输入样例

1
3 1
1 1
1

输出样例

MengMengDa!

裸的every-sg,连sg具体值都不用求,有问题的地方大概就是,当sg==0(必败)的时候,下一步会选取的是长度最小的某必胜态势,当sg==1的时候,选取长度最大的某必败态势.(不要加入必胜态势)

#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
#define MAXN 100002
int step[MAXN];
int first[MAXN];
int next[MAXN];
int to[MAXN];
int sg[MAXN];
int mex(int i){
if(first[i]==-1)return sg[i]=0;
if(sg[i]!=-1)return sg[i];
int p=first[i];
while(p!=-1){
if(mex(to[p])==0)return sg[i]=1;
p=next[p];
}
return sg[i]=0;
}
int edgeindex;
void addedge(int from,int _to){
next[edgeindex]=first[from];
first[from]=edgeindex;
to[edgeindex]=_to;
edgeindex++;
}
int dfs(int i){
if(first[i]==-1)return step[i]=0;
if(step[i]!=-1)return step[i];
int minstatus=0x3ffffff,maxstatus=0;
int p=first[i];
while(p!=-1){
if(sg[to[p]]==0){
maxstatus=max(maxstatus,dfs(to[p])+1);
}
minstatus=min(minstatus,dfs(to[p])+1);
p=next[p];
}
return step[i]=sg[i]==0?minstatus:maxstatus;
}
int main(){
ios::sync_with_stdio(false);
int t;
cin>>t;
while(t--){
memset(sg,-1,sizeof(sg));
memset(first,-1,sizeof(first));
memset(step,-1,sizeof(step));
int n,m;
edgeindex=0;
cin>>n>>m;
int temp;
for(int i=2;i<=n;i++){
cin>>temp;
addedge(temp,i);
}
for(int i=n;i>=1;i--)mex(i); for(int i=n;i>=1;i--)dfs(i); int maxstep=0;
while(m--){
cin>>temp;
maxstep=max(step[temp],maxstep);
}
if(maxstep&1){
cout<<"MengMengDa!"<<endl;
}
else cout<<"So sad..."<<endl;
}
return 0;
}

学姐果然萌萌哒

e:

425. 木头人足球赛

时间限制 1000 ms 内存限制 65536 KB

题目描述

木头人星的行动速度是地球上乌龟的1/10(所以可以忽略移动的速度),可是他们也热爱运动,尤其是足球。 他们的足球规则跟人类的一样,足球场尺寸为标准 105 * 68,两队各 11 名球员参赛。 假设 Mays 队的每个队员都是专业的球员,踢球都特别准。而她们的对手 Luke 队截球的规律是,如果行进的球离自己的距离不超过d,就可以截球成功。 现在 Mays 队的十号球员拿到了球,如果只允许一次射门,Mays 队能不能进球呢? 足球场在xy平面内,(0,0)至(105,68)矩形范围内,边缘与x,y轴平行且不能站人。其中Luke队的球门为(0, 30)-(0, 38),Mays 队的球门为(105,30)-(105, 38)

输入格式

第一行为组数T ,对这T组数据,每组第一行是Mays队十号球员的坐标x0,y0,接下来 11 行为 Luke 队的 1 - 11 号队员的属性 xi,yi,di, 其中xi,yi表示 i 号球员的坐标,di表示i号球员截球能力值。 保证所有坐标不重复且都在球场范围内,x,y为整数,d为正实数 1.0≤d≤3.0。

输出格式

每组数据一行,如果 Mays 队10号队员直接可以射门得分,则输出“Shoot!‍‍”;如果10号队员不能成功射门,输出"Poor Mays!‍‍".

输入样例

1
104 34
1 24 2.928
48 25 2.605
15 41 1.312
39 42 2.454
3 12 2.080
18 39 1.564
10 36 2.530
97 13 1.589
101 57 1.844
84 39 2.561
0 33 1.831‍

输出样例

Shoot!‍

从大尧神那里学到了新姿势,通过3/2pi-angle把需要的角度(pi/2-3pi/3)连续并且取正了,以及直接计算切线与圆心连线的夹角来计算切线角度,这题要是卡高精就完了.卡在"如果截球角度下限超过最大射球角度没有及时退出"上,另外还一直卡在"射了自家球门"上....完全没有思考
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
#define inf 0x7fffffff
const double eps = 1e-6;
const double pi=acos(-1);
double calk(int x1,int y1,int x2,int y2){
double b=atan2((y2-y1),(x2-x1));
if(b>eps)b=3*pi/2.0-b;
else if(b<-eps)b=-pi/2.0-b;
else b=3*pi/2.0;
return b;
}
double caldis(int x1,int y1,int x2,int y2){return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));}
void caldk(int x0,int y0,int x1,int y1,double d,double& ans1,double &ans2){
double dis=caldis(x0,y0,x1,y1);
double a=asin(d/dis);
// cout<<"a"<<a<<endl;
double b=calk(x0,y0,x1,y1);
// cout<<"b"<<b<<endl;
ans1=max(b+a,b-a);
ans2=min(b-a,b+a);
} int x[12],y[12];
double d[12];
struct foot{
double s, e;
};
foot k[11];
bool cmp(foot f1,foot f2){
if(f1.s+eps<f2.s)return true;
return false;
}
int main(){
int t;
cin>>t;
while(t--){
cin>>x[0]>>y[0];
for(int i=1;i<12;i++){
cin>>x[i]>>y[i]>>d[i];
}
bool fl2=false;
for(int i=1;i<12;i++){
if(caldis(x[0],y[0],x[i],y[i])<d[i]+eps){
cout<<"Poor Mays\n"<<endl;
fl2=true;
}
if(fl2)break;
}
if(fl2)continue;
double maxk=calk(x[0],y[0],0,38);
double mink=calk(x[0],y[0],0,30);
for(int i=1;i<12;i++){
caldk(x[0],y[0],x[i],y[i],d[i],k[i-1].e,k[i-1].s);
}
sort(k,k+11,cmp);
//for(int i=0;i<11;i++)cout<<"k"<<i+1<<" "<<k[i].s<<" "<<k[i].e<<endl;
double s=mink,e=mink;
bool fl=false;
for(int i=0;i<11;i++){
if(k[i].s>maxk+eps)break;
if(s+eps<k[i].s){
s=k[i].s;
if(e+eps<k[i].s){fl=true;break;}
}
e=max(e,k[i].e);
//cout<<"s "<<s<<"e"<<e<<endl;
}
if(!fl&&e+eps<maxk)fl=true;
if(fl)cout<<"Shoot!\n";
else cout<<"Poor Mays!\n";
}
return 0;
}

北邮新生排位赛2解题报告d-e的更多相关文章

  1. 北邮新生排位赛1解题报告d-e

    话说cdsn要是前面插入源代码又什么都不放就会出现奇怪的源代码?不知道是哪个网页的 407. BLOCKS 时间限制 1000 ms 内存限制 65536 KB 题目描述 给定一个N∗M的矩阵,求问里 ...

  2. 北邮新生排位赛1解题报告a-c

    <div class="page-header" style="padding-bottom: 9px; margin: 20px 0px 30px; border ...

  3. 北邮新生排位赛2解题报告a-c

    A. 丁神去谷歌 2014新生暑假个人排位赛02 时间限制 1000 ms 内存限制 65536 KB 题目描述 丁神要去Google上班了,去之前丁神想再做一道水题,但时间不多了,所以他希望题目做起 ...

  4. 2014北邮新生归来赛解题报告a-c

    <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...

  5. 2014北邮新生归来赛解题报告d-e

    D: 399. Who Is Joyful 时间限制 3000 ms 内存限制 65536 KB 题目描述 There are several little buddies standing in a ...

  6. SCNU ACM 2016新生赛决赛 解题报告

    新生初赛题目.解题思路.参考代码一览 A. 拒绝虐狗 Problem Description CZJ 去排队打饭的时候看到前面有几对情侣秀恩爱,作为单身狗的 CZJ 表示很难受. 现在给出一个字符串代 ...

  7. SCNU ACM 2016新生赛初赛 解题报告

    新生初赛题目.解题思路.参考代码一览 1001. 无聊的日常 Problem Description 两位小朋友小A和小B无聊时玩了个游戏,在限定时间内说出一排数字,那边说出的数大就赢,你的工作是帮他 ...

  8. 2017.7.15清北夏令营精英班Day1解题报告

    成绩: 预计分数:20+10+40 实际分数:100+10+40. 一百三十多人的比赛全场rand7还水了个鼠标+键盘 unbelievable! 考试题目链接: https://www.luogu. ...

  9. LeetCode解题报告:Linked List Cycle && Linked List Cycle II

    LeetCode解题报告:Linked List Cycle && Linked List Cycle II 1题目 Linked List Cycle Given a linked ...

随机推荐

  1. python字符串格式化之format

    用法: 它通过{}和:来代替传统%方式 1.使用位置参数 要点:从以下例子可以看出位置参数不受顺序约束,且可以为{},只要format里有相对应的参数值即可,参数索引从0开,传入位置参数列表可用*列表 ...

  2. IntelliJ IDEA 在运行web项目时部署的位置

    在idea中运行tomcat,把项目部署到其中,运行起来,去tomcat目录下去看,根本找不到部署的项目,那么项目是怎么运行的? 在idea中配置的tomcat,在运行时idea不会把项目放到该路径下 ...

  3. SpringBoot添加自定义消息转换器

    首先我们需要明白一个概念:springboot中很多配置都是使用了条件注解进行判断一个配置或者引入的类是否在容器中存在,如果存在会如何,如果不存在会如何. 也就是说,有些配置会在springboot中 ...

  4. redis安装使用配置

    一.安装前的准备 下载redis http://redis.io/download https://github.com/mythz/redis-windows 下载Windows版客户端net版sd ...

  5. C#学习笔记(十四):多态、虚方法和抽象类

    虚方法/非虚方法 < 实例方法 = 非静态方法 = 非类方法(非实例方法 = 静态方法 = 类方法) 函数签名(参数列表,或参数列表 + 返回类型) using System; using Sy ...

  6. Facebook广告API系列 1

    Facebook广告API系列 1 前言 最近遇到大坑了,居然要去对接facebook的广告API,之前以为是跟鹅厂一样的API体系,看了半天Facebook的文档,冷汗直冒.... 这得一点一点的讲 ...

  7. python 千位分隔符,

    >>>) >>>'1,234,567,890'

  8. hihoCoder 1513 小Hi的烦恼

    hihoCoder 1513 小Hi的烦恼 思路: 用bitset判断交集个数 代码: #include<bits/stdc++.h> using namespace std; #defi ...

  9. English trip -- VC(情景课)4 D

    What do you see? I can see three men in the pictrue. one older man is a doctor, two younger men are ...

  10. 20161212xlVBA工作表数据整理合并单元格

    Sub NextSeven_CodeFrame() '应用程序设置 Application.ScreenUpdating = False Application.DisplayAlerts = Fal ...