题目1:moon

你搁这出脑筋急转弯呢T_T

给出一棵以 1 为根的有根树,一开始每个节点都是白色的。David 和 Adam 在树上博弈,David 先手,每次每个人需要选择树上一个白色的点,并把这个点以及其到根路径上的所有点染成黑色。无法操作的人输。

假定两人均绝顶聪明,你需要求出谁会获胜。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// #include<iostream>
// using namespace std;
// const int N=1e5+10;

// int a[N]={0};
// bool st[N]={false};
// int n;
// int ans=0;//操作次数

// void fun(int v)
// {
// if(a[v]!=-1&&!st[v])
// {
// n--;
// st[v]==true;
// n++;
// fun(a[v]);
// }
// return;
// }

// int main()
// {
// a[1]=-1;
// scanf("%d",&n);
// for(int i=2;i<=n-1;i++) scanf("%d",&a[i]);
// fun()

// return 0;
// }

//David先手必胜
#include<iostream>
using namespace std;
int main()
{
cout<<"David"<<endl;
return 0;
}

题目2:小红的基环树

脑筋急转弯二号

定义基环树为n个节点、n条边的、没有自环和重边的无向连通图。
定义一个图的直径是任意两点最短路的最大值。
小红想知道,n个节点构成的所有基环树中,最小的直径是多少?

1
2
3
4
5
6
7
8
9
10
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
if(n!=3)cout<<2<<endl;
else cout<<1<<endl;
return 0;
}

题目3:小红的回文串

小红拿到了一个字符串,字符串仅由小写字母和’?’字符组成。
小红会将每个’?’替换成任意小写字母。她希望最终字符串变成回文串。
小红想知道,有多少种不同的方案?答案请对1e9+7取模。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include<iostream>
using namespace std;
const int N = 200010, MOD = 1e9 + 7;

string s;


int main()
{
cin >> s;
int l = 0, r = s.length() - 1;
long long ans = 1;
while (l <= r)
{
if (s[l] == '?' || s[r] == '?')
{
if (s[l]==s[r]) ans *= 26,ans%=MOD;//两个?
}
else
{
if (s[l] != s[r])
{
ans = 0;
break;
}
}
l++, r--;
}
cout << ans << endl;
return 0;
}