<>

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. linux内核分析 第18章读书笔记

    十八章 调试 一.内核调试概述 1.需要面对的 一个确定的bug 一个藏匿bug的内核版本 相关的内核代码的知识和运气 2.艰难的调试工作 重现bug很困难:大部分bug通常都不是行为可靠而且定义明确 ...

  2. TensorFlow入门(三)多层 CNNs 实现 mnist分类

    欢迎转载,但请务必注明原文出处及作者信息. 深入MNIST refer: http://wiki.jikexueyuan.com/project/tensorflow-zh/tutorials/mni ...

  3. codevs & vijos 爱在心中 - Tarjan

    描述 “每个人都拥有一个梦,即使彼此不相同,能够与你分享,无论失败成功都会感动.爱因为在心中,平凡而不平庸,世界就像迷宫,却又让我们此刻相逢Our Home.” 在爱的国度里有N个人,在他们的心中都有 ...

  4. IMAP协议命令(详细)

    参照:http://www.cnblogs.com/qiubole/archive/2007/11/23/970180.html 转载:http://blog.sina.com.cn/s/blog_5 ...

  5. Memcached深入分析及内存调优

    到这里memcached的初步使用我们已经没问题了,但是了解一些它内部的机制还是十分必要的,这直接涉及到你能否把memcached给真正“用好”. Memcached的守护进程机制使用的是Unix下的 ...

  6. POJ 2425 A Chess Game(有向图SG函数)题解

    题意:给一个有向图,然后个m颗石头放在图上的几个点上,每次只能移动一步,如果不能移动者败 思路:dfs打表sg函数,然后求异或和 代码: #include<queue> #include& ...

  7. POJ 3687 Labeling Balls(拓扑排序)题解

    Description Windy has N balls of distinct weights from 1 unit to N units. Now he tries to label them ...

  8. 【安装】Microsoft SQL Server的安装

    数据库版本:2012 系统环境:windows 7 一.安装 依次选择“安装->全新 SQL Server 独立安装或向现有安装添加功能”;点“确定” 选择版本,推荐标准版,这里是直接输入序列号 ...

  9. UVa 1220 Hali-Bula的晚会(树的最大独立集)

    https://vjudge.net/problem/UVA-1220 题意: 公司里有n个人形成一个树状结构,即除了老板以外每个员工都有唯一的直属上司.要求选尽量多的人,但不能同时选择一个人和他的直 ...

  10. yii2 高级版新建一个应用(api应用为例子)

    先在项目的根目录下复制一份 backend 为 api: cp backend/ api -r 拷贝 api 环境 cp -a environments/dev/frontend environmen ...