[关闭]
@LinKArftc 2015-09-02T08:39:31.000000Z 字数 1326 阅读 1009

2015多校3

多校


K-Work

题意

给定n(1<=n<=100)个结点的一棵树,求树上结点的子节点数为k(0<=k<n)的数目

思路

dfs 水题

AC代码

  1. const int maxn = 105;
  2. vector <int> edge[maxn];
  3. int n, k;
  4. int num[maxn];
  5. int dfs(int x) {
  6. num[x] += edge[x].size();
  7. for (int i = 0; i < edge[x].size(); i ++) {
  8. num[x] += dfs(edge[x][i]);
  9. }
  10. return num[x];
  11. }
  12. int main() {
  13. while (~scanf("%d %d", &n, &k)) {
  14. for (int i = 1; i <= n; i ++) edge[i].clear();
  15. memset(num, 0, sizeof(num));
  16. for (int i = 1; i < n; i ++) {
  17. int u, v;
  18. scanf("%d %d", &u, &v);
  19. edge[u].push_back(v);
  20. }
  21. dfs(1);
  22. int ans = 0;
  23. for (int i = 1; i <= n; i ++) {
  24. if (num[i] == k) ans ++;
  25. }
  26. printf("%d\n", ans);
  27. }
  28. return 0;
  29. }

D-Painter

题意

给定n*m的图,两种刷子,'R'表示红色,方向'\','B'表示蓝色,方向'/','G'表示绿色,是红色和蓝色叠加后的颜色,'R''B'表示的方格只能被刷一次,'G'则只能刷两次

思路

只要记录'R'方格左上角是否为'R'或'G',如果不是,则一定需要从这个点开始用红刷子多刷一次,同理,判断'B'方格右下角是否'B'或'G',需要注意'G'的情况。
这题没有给出m,需要根据读入得到m,恰好样例都是4*4的,实在是太坑了,以为是n*n的图,WA了一次。认真读题啊!!!

AC代码

  1. const int maxn = 55;
  2. char mp[maxn][maxn];
  3. int main() {
  4. int T;
  5. scanf("%d", &T);
  6. while (T --) {
  7. int n, m;
  8. scanf("%d", &n);
  9. memset(mp, '.', sizeof(mp));
  10. for (int i = 1; i <= n; i ++) scanf("%s", &mp[i][1]);
  11. m = strlen(&mp[1][1]);
  12. int ans = 0;
  13. for (int i = 1; i <= n; i ++) {
  14. for (int j = 1; j <= m; j ++) {
  15. if (mp[i][j] == 'R') {
  16. if (mp[i-1][j-1] != 'R' && mp[i-1][j-1] != 'G') ans ++;
  17. } else if (mp[i][j] == 'B') {
  18. if (mp[i+1][j-1] != 'B' && mp[i+1][j-1] != 'G') ans ++;
  19. } else if (mp[i][j] == 'G') {
  20. if (mp[i-1][j-1] == '.' || mp[i-1][j-1] == 'B') ans ++;
  21. if (mp[i+1][j-1] == '.' || mp[i+1][j-1] == 'R') ans ++;
  22. }
  23. }
  24. }
  25. printf("%d\n", ans);
  26. }
  27. return 0;
  28. }

B-RGCDQ

题意

定义F(i):i不同的素数因子的个数,求区间[L,R]max GCD(F(i), F(j)) (L <= i < j <= R)

思路

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注