这几天好多不会的简单题都没补,抽空补几(两)题
牛客练习赛B
看完没思路,只会最短路求法,果然无数发tle和mle
然后看到别人两三分钟就过了
后来才发现题目说了是树,画一下图就很清楚了
下图中,与结点1距离为2的结点个数就是与它相邻的点(2)相邻的点的个数5
再减去1
(1本身)
AC代码:
vector<int> G[200010];
int main()
{
// IOS;
// FRE;
int n;
cin >> n;
for (int i = 1, u, v; i < n; i++)
{
cin >> u >> v;
G[u].push_back(v);
G[v].push_back(u);
}
for (int i = 1; i <= n; i++)
{
int ans = 0;
for (int j = 0; j < G[i].size(); j++)
ans += G[G[i][j]].size() - 1;
cout << ans << endl;
}
return 0;
}
HDU2577
首先要知道:
1.没开大写锁定的时候可以按shift开大写
2.开大写锁定的时候可以按shift开小写
AC代码:
int dp[105][3]; //dp[i][0] dp[i][1]表示输入完第i个字符后capslock状态
int main()
{
// IOS;
// FRE;
int t;
cin >> t;
while (t--)
{
string a;
cin >> a;
int len = a.size();
a = '#' + a; //把'#'加到后面了,调了一年。。
fill(dp[0], dp[0] + 314, INF);
dp[0][1] = 1;
dp[0][0] = 0;
for (int i = 1; i <= len; i++)
{
if (a[i] <= 'Z' && a[i] >= 'A')
{
dp[i][0] = min(dp[i - 1][0] + 2, dp[i - 1][1] + 2);
dp[i][1] = min(dp[i - 1][1] + 1, dp[i - 1][0] + 2);
}
else
{
dp[i][0] = min(dp[i - 1][0] + 1, dp[i - 1][1] + 2);
dp[i][1] = min(dp[i - 1][0] + 2, dp[i - 1][1] + 2);
}
}
cout << min(dp[len][0], dp[len][1] + 1) << endl;
}
return 0;
}