K. MUV LUV UNLIMITED(树上博弈)

原题链接:K. MUV LUV UNLIMITED

题意:

  • 给你一棵 n 个点以 1 为根的有根树。现在有两个人轮流操作,每次操作人可以选出至少1个叶子(没有儿子的点)删掉,无法操作的人失败。二者都是最优策略,问先手必胜还是后手必胜!

思路:

  • 如果是一条链的话,二者只能依次选择,判断奇偶即可;
  • 如果存在一个叶子节点,他的父亲节点的出度大于1,那么先手必胜!
  • 如果有多个链的话:若所有链的长度都是偶数,先手必败。其余先手必胜!

图解:

1.单条链,判断节点奇偶。
在这里插入图片描述2.只要有一个父节点出度大于2,先手都可以改变胜负态。
在这里插入图片描述3.多条链 全偶先手必输,其余情况先手可以改变胜负状态!
在这里插入图片描述

代码:

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 5e6 + 10, mod = 1e9 + 7;
int fa[N], s[N];

void solve()
{
	int n;
	cin >> n;
	for(int i = 1; i <= n; i++)fa[i] = 0, s[i] = 0;
	for(int i = 2; i <= n; i++){
		cin >> fa[i];
		s[fa[i]]++;
	}
	
	bool flag = 0;
	for(int i = 1; i <= n && !flag; i++){
		if(s[i] == 0){ 
			int u = i, tt = 0;
			while(s[u] < 2){
				tt++;
				if(u == 1)break;
				u = fa[u];
			}
			if(tt & 1)flag = 1;
		}
	}
	if(flag)cout << "Takeru\n";
	else cout << "Meiya\n";
}

signed main()
{
	ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
	int T = 1;
	cin >> T;
	while(T--)solve();
	return 0;
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,以下是MATLAB代码实现: ```matlab % 读取.mat文件 load('data.mat', 'data', 'event'); % 确定11Hz对应的采样点数 fs = 1000; f = 11; n_samples = floor(fs/f); % 提取所有11Hz刺激下的数据段 data_11hz = []; for i = 1:length(event) if event(i) == 11 % 判断是否为11Hz刺激任务 start = i; % 刺激任务开始的样本点 end_ = start + 12000; % 刺激任务结束的样本点 data_11hz(:,:,end+1:end+n_samples:end_) = data(:, start:end_); end end % 对所有11Hz刺激下的数据段进行去基线 data_11hz_detrend = detrend(data_11hz, 0, 2); % 得到channels×samples×trials的数据格式 channels = size(data_11hz_detrend, 1); samples = size(data_11hz_detrend, 2); trials = size(data_11hz_detrend, 3); % 绘制第62通道,第6段11Hz的8秒脑电数据 channel_idx = 62; segment_idx = 6; start_idx = (segment_idx-1)*(8+4)*fs + 1; end_idx = start_idx + 8*fs - 1; data_8s = data_11hz_detrend(channel_idx, :, start_idx:end_idx); time = (0:1/fs:8-1/fs)'; figure; plot(time, data_8s); xlabel('Time (s)'); ylabel('Amplitude (\muV)'); title('Channel 62, Segment 6, 11Hz Data'); % 计算第62通道,第1段实验11Hz刺激下数据的功率谱 segment_idx = 1; start_idx = (segment_idx-1)*(8+4)*fs + 1; end_idx = start_idx + 8*fs - 1; data_8s = data_11hz_detrend(:, :, start_idx:end_idx); data_11hz_segment1 = data_8s(:, 1:n_samples:end); Pxx = pwelch(data_11hz_segment1(channel_idx, :), [], [], [], fs); f = linspace(0, fs/2, length(Pxx)); figure; plot(f, 10*log10(Pxx)); xlabel('Frequency (Hz)'); ylabel('Power (dB)'); title('Channel 62, Segment 1, 11Hz Power Spectrum'); % 对所有实验11Hz数据段进行同步平均后再计算功率谱,绘制功率谱曲线进行比较 data_11hz_mean = mean(data_11hz_detrend, 3); Pxx_mean = pwelch(data_11hz_mean(channel_idx, :), [], [], [], fs); figure; plot(f, 10*log10(Pxx_mean), 'LineWidth', 2); hold on; for segment_idx = 1:6 start_idx = (segment_idx-1)*(8+4)*fs + 1; end_idx = start_idx + 8*fs - 1; data_8s = data_11hz_detrend(:, :, start_idx:end_idx); data_11hz_segment = data_8s(:, 1:n_samples:end); data_11hz_segment_mean = mean(data_11hz_segment, 2); Pxx_segment = pwelch(data_11hz_segment_mean(channel_idx, :), [], [], [], fs); plot(f, 10*log10(Pxx_segment)); end hold off; legend('Mean', 'Segment 1', 'Segment 2', 'Segment 3', 'Segment 4', 'Segment 5', 'Segment 6'); xlabel('Frequency (Hz)'); ylabel('Power (dB)'); title('Channel 62, 11Hz Power Spectrum Comparison'); ``` 这段代码中,我们使用了MATLAB内置函数`pwelch`来计算功率谱。其中,第一个输入参数为数据向量,第二个和第三个参数为空,表示使用默认的段长度和重叠长度,第四个参数为采样率,表示单位时间内采样的样本数。我们还使用了MATLAB内置函数`mean`来进行同步平均,计算出所有实验11Hz数据段的平均数据段。最后,我们使用MATLAB内置函数`plot`来绘制图形。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值