HDU 5963 朋友 (找规律,思维)】的更多相关文章

HDU 5963 朋友 题目大意 B君在围观一群男生和一群女生玩游戏,具体来说游戏是这样的: 给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1. 在一局游戏开始时,会确定一个节点作为根.接下来从女生开始,双方轮流进行 操作. 当一方操作时,他们需要先选择一个不为根的点,满足该点到其父亲的边权为1; 然后找出这个点到根节点的简单路径,将路径上所有边的权值翻转(即0变成1,1 变成0 ). 当一方无法操作时(即所有边的边权均为0),另一方就获得了胜利. 如果在双方均采用最优策略…
刚看到这题时感觉是树上博弈,然后我开始用一维的数据找规律.发现在一维的树上,如果把各边的值合在一起当成一个二进制数,那么,ans只与奇偶性有关,于是,我提出了一个比较大胆的假设:若连接在root上的所有边异或和为1,则girls win,否则boys win.然后强力大腿队友立马就把我这想法用代码实现了,在oj上一交,没过,我想,算了,也许是想法错了,打算再想想,突然队友发现#define N 400000 里,N小了,改大一点点再交,卧槽!这特么居然真的可以AC!后来看别人博客,发现了一个不错…
Equations 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2086 ——每天在线,欢迎留言谈论. 题目大意: 有如下方程:Ai = (Ai-1 + Ai+1)/2 - Ci (i = 1, 2, 3, .... n). 若给出A0, An+1, 和 C1, C2, .....Cn. 求 A1 . 思路: 多写几个例子,找规律推导(抄的). 感想: 老啦,老啦,不行了. Java AC代码: import java.util.Scanner;…
http://acm.hdu.edu.cn/showproblem.php?pid=5047 找规律 信kuangbin,能AC #include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map&g…
题目内容 B君在围观一群男生和一群女生玩游戏,具体来说游戏是这样的: 给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1. 在一局游戏开始时,会确定一个节点作为根.接下来从女生开始,双方轮流进行操作. 当一方操作时,他们需要先选择一个不为根的点,满足该点到其父亲的边权为1; 然后找出这个点到根节点的简单路径,将路径上所有边的权值翻转(即0变成1,1变成0). 当一方无法操作时(即所有边的边权均为0),另一方就获得了胜利. 如果在双方均采用最优策略的情况下,女生会获胜,则输出"…
http://acm.hdu.edu.cn/showproblem.php?pid=5963 题意: 思路: 我们可以先只考虑单链,自己试几种案例就可以发现规律,只有与根相连的边为1时,只需要奇数次操作,也就是1次就可以,而别的都需要偶数次操作才能把这条链上的边权全变成0,次数为$2^{n-1}$,n为边的层数.所以我们只要统计与根相连的有多少条权值为1的边即可. 需要改权值的时候搜索一下找到边然后修改. #include<iostream> #include<algorithm>…
题干 B君在围观一群男生和一群女生玩游戏,具体来说游戏是这样的: 给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1. 在一局游戏开始时,会确定一个节点作为根.接下来从女生开始,双方轮流进行 操作. 当一方操作时,他们需要先选择一个不为根的点,满足该点到其父亲的边权为1; 然后找出这个点到根节点的简单路径,将路径上所有边的权值翻转(即0变成1,1 变成0 ). 当一方无法操作时(即所有边的边权均为0),另一方就获得了胜利. 如果在双方均采用最优策略的情况下,女生会获胜,则输出…
朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Description B君在围观一群男生和一群女生玩游戏,具体来说游戏是这样的:给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1. 在一局游戏开始时,会确定一个节点作为根.接下来从女生开始,双方轮流进行 操作.当一方操作时,他们需要先选择一个不为根的点,满足该点到其父亲的边权为1; 然…
朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 215    Accepted Submission(s): 137 Problem Description B君在围观一群男生和一群女生玩游戏,具体来说游戏是这样的:给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1. 在一局游戏开始时,会确定一个节点作为根.接下…
题目 B君在围观一群男生和一群女生玩游戏,具体来说游戏是这样的: 给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1. 在一局游戏开始时,会确定一个节点作为根.接下来从女生开始,双方轮流进行 操作. 当一方操作时,他们需要先选择一个不为根的点,满足该点到其父亲的边权为1; 然后找出这个点到根节点的简单路径,将路径上所有边的权值翻转(即0变成1,1 变成0 ). 当一方无法操作时(即所有边的边权均为0),另一方就获得了胜利. 如果在双方均采用最优策略的情况下,女生会获胜,则输出…
题目 B君在围观一群男生和一群女生玩游戏,具体来说游戏是这样的: 给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1. 在一局游戏开始时,会确定一个节点作为根.接下来从女生开始,双方轮流进行操作. 当一方操作时,他们需要先选择一个不为根的点,满足该点到其父亲的边权为1; 然后找出这个点到根节点的简单路径,将路径上所有边的权值翻转(即0变成1,1 变成0). 当一方无法操作时(即所有边的边权均为0),另一方就获得了胜利. 如果在双方均采用最优策略的情况下,女生会获胜,则输出"G…
http://acm.hdu.edu.cn/showproblem.php?pid=5106 给定n和r,要求算出[0,r)之间所有n-onebit数的和,n-onebit数是所有数位中1的个数. 对于一个n-bit数,可以根据与R最高不同位的位置分成几类.比如R=100100010,可以分成0xxxxxxxx,1000xxxxx,10010000x三类.x处可任取0或者1.x的个数为n,x中1的个数为k.和分两部分,高于n位的有C(n,k)乘以n位之前的数字,低于n位的部分有C(n-1,k-1…
题目链接:hdu_5963_朋友 题意: 中文,不解释 题解: 把样例拿出来看看,你会发现以x为节点是否能赢,就是与x相连的边权值的和或者异或是否为奇数. #include<bits/stdc++.h> #define F(i,a,b) for(int i=a;i<=b;i++) using namespace std; typedef long long ll; ; int t,n,m,g[N],nxt[N],v[N],w[N],ed; void adg(int x,int y,int…
 题目链接: D - Doom  HDU - 5239  题目大意:首先是T组测试样例,然后n个数,m次询问,然后每一次询问给你一个区间,问你这个这段区间的加上上一次的和是多少,查询完之后,这段区间里面的每个数变为原来的平方. 具体思路:这个模数,和正常的模数不一样. 然后通过打表能发现,每个数不断自身平方对p取模后经过有限次 就不会变化了, 测试少于30次 所以也就是说每个节点至多会被更新30次. 注意会爆long long ,需要用unsigned long long . AC代码: #in…
题意是: 一群男生和一群女生玩游戏:给出一棵 n 个节点的树,这棵树的每条边有一个权值 0 或 1. 在一局游戏开始时,确定一个节点作为根.从女生开始,双方轮流进行操作. 当一方操作时,要先选择一个不为根且到其父亲的边权为 1 的点,然后找出这个点到根节点的简单路径,将路径上所有边的权值翻转(即 0 变成 1,1 变成 0 ). 当一方无法操作时(即所有边的边权均为 0),另一方就获得了胜利.双方均采用最优策略,若女生获胜,则输出 “Girls win!”,否则输出“Boys win!”. 每局…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4708 思路:由于N不大,并且我们可以发现通过旋转得到的4个对角线的点的位置关系,以及所要旋转的最小步数,然后把所有的符合条件的都加入数组中,最后排序即得. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct No…
OK,好的先看一下题意: B君在围观一群男生和一群女生玩游戏,具体来说游戏是这样的: 给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1. 在一局游戏开始时,会确定一个节点作为根.接下来从女生开始,双方轮流进行 操作. 当一方操作时,他们需要先选择一个不为根的点,满足该点到其父亲的边权为1; 然后找出这个点到根节点的简单路径,将路径上所有边的权值翻转(即0变成1,1 变成0 ). 当一方无法操作时(即所有边的边权均为0),另一方就获得了胜利. 如果在双方均采用最优策略的情况下…
题目意思很简单. 就是洗牌,抽出奇数和偶数,要么奇数放前面,要么偶数放前面. 总共2^N张牌. 需要问的是,给了A X B Y  问经过若干洗牌后,第A个位置是X,第B个位置是Y 是不是可能的. Jason is not only an ACMer, but also a poker nerd. He is able to do a perfect shuffle. In a perfect shuffle, the deck containing K cards, where K is an…
题意: 给出矩阵M,求M*M矩阵的r行c列的数,每个查询跟前一个查询的结果有关. 解法: 观察该矩阵得知,令ans = M*M,则 ans[x][y] = (n-1-x行的每个值)*(n-1+y列的每个值).直接对每个查询做n次累加(n*m=10^8的复杂度)竟然可以水过. 官方题解给的是n^2的算法,维护一个前缀和,即sum[i][j] 表示 i+j不变的所有sum[i][j]之和. 因为 ans[x][y]就是 a[y]*a[2*n-x] + .... + a[y+n-1]*a[n-x+1]…
为了提高题解质量还是简单证明一下:3的倍数是必败状态. 如果n % 3 = 1,那么拿走1个石子:如果n % 3 = 2,那么拿走两个石子,都将转移到3的倍数的状态.所以每个必胜状态都有一个后继是必败状态. 如果n % 3 = 0,因为2i里面没有一个是3的倍数,所以不管怎么拿,剩下的石子数n' % 3 != 0.所以每个必败状态的所有后继都是必胜状态. 证必. #include <cstdio> int main() { int n; && n) printf( ? &quo…
根据博弈论的两条规则: 一个状态是必胜状态当且仅当有一个后继是必败状态 一个状态是必败状态当且仅当所有后继都是必胜状态 然后很容易发现从1开始,前p个状态是必败状态,后面q个状态是必胜状态,然后循环往复. #include <cstdio> int main() { int n, p, q; ) printf()%(p+q)<p ? "LOST" : "WIN"); ; } 代码君…
Substrings Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1161    Accepted Submission(s): 351 Problem Description XXX has an array of length n. XXX wants to know that, for a given w, what is…
input n 1<=n<=1e18 output 有n个结点的满二叉树有多少个不相同结点数的子树 做法:树有h=log2(n)层,最多有2h-2种(1除外),然后再n减去u重复的即可 #include <bits/stdc++.h> #include <cstdio> #include <queue> #include <cstring> #include <iostream> #include <cstdlib> #i…
The sequence is generated by the following scheme. 1. First, write down 1, 2 on a paper. 2. The 2nd number is 2, write down 2 2’s (including the one originally on the paper). The paper thus has 1, 2, 2 written on it. 3. The 3rd number is 2, write dow…
#include"stdio.h" int main( ) { int n,m; ||m!=)) { ==||m%==) printf("Wonderful!\n"); else printf("What a pity!\n"); } ; } 这题我没交  感觉有点水吧...记下来 复习看看  https://cn.vjudge.net/problem/HDU-2147 只有再行和列都为奇数时 先手才赢…
#include<vector> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 40010 using namespace std; int indeg[maxn]; vector<int> g[maxn]; int main() { int T,n,m; int u,v,w; scanf("%d",&T); while(T--)…
假设最少删除的边的个数为cost,显然,最终答案即为cost+cost+1 (因为删除一条边,就会增加一个链,所以删除cost条边后,就会有cost+1条链,将这cost+1条链连接起来的代价为cost+1, 删除cost条边的代价为cost,所以总代价为cost+cost+1) 求最少删除的边数: 首先我们定义一棵子树中的链不能以该子树的根为端点,以下提到的所有链均必须满足这个条件. 设一棵以节点i为根的子树中,叶子节点的个数为duan,并设i的父亲为fa. 那么,这棵子树至少会分割成duan…
  Sawtooth Think about a plane: ● One straight line can divide a plane into two regions. ● Two lines can divide a plane into at most four regions. ● Three lines can divide a plane into at most seven regions. ● And so on... Now we have some figure con…
Coach Pang and Uncle Yang both love numbers. Every morning they play a game with number together. In each game the following will be done:  1. Coach Pang randomly choose a integer x in [a, b] with equal probability.  2. Uncle Yang randomly choose a i…
Nim or not Nim? Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 3032 Description Nim is a two-player mathematic game of strategy in which players take turns removing objects from distinct heaps.…