DAY2的坑之后会补上

DAY3

今天暴力分拿的还是不错的...60+30+25=115,但还是太弱了呀,每题都只会暴力(话说第3题直接输-1给了15分,本以为只会给5分,然后打了半个小时的爆搜...)

T1:Simple (图样图森破?)

【问题描述】
对于给定正整数 n,m,我们称正整数 c 为好的,当且仅当存在非
负整数 x,y,使得 n*x+m*y=c。
现在给出多组数据,对于每组数据,给定 n,m,q,求[1,q]内有
多少个正整数不是好的。
【输入格式】
第一行,一个整数 T 表示数据组数。
接下来每行三个数,分别表示 n,m,q,即一组询问。
【输出格式】
对于每组数据,输出一行表示答案。

考试的时候打了一个暴力,妥妥的60分...

交卷前问了一下Venus巨佬,然而他说是一道DP题,感觉瞬间明白了什么,其实就是一道简单的DP啊,但来不及改了...

思路:DP(当然数学方法也可以,但是好烦啊...)类似于背包?反正暴力填表就好了..把“好的数”求出来,然后减一下就好了

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #define int long long
  6. using namespace std;
  7. inline int read(){
  8. char chr=getchar(); int f=,ans=;
  9. while(!isdigit(chr)) {if(chr=='-') f=-;chr=getchar();}
  10. while(isdigit(chr)) {ans=(ans<<)+(ans<<);ans+=chr-'';chr=getchar();}
  11. return ans*f;
  12. }
  13. void write(int x){
  14. if(x<) putchar('-'),x=-x;
  15. if(x>) write(x/);
  16. putchar(x%+'');
  17. }
  18. int n,m,h,f[];
  19. signed main(){
  20. freopen("simple.in","r",stdin);
  21. freopen("simple.out","w",stdout);
  22. int t=;
  23. t=read();
  24. for(int i=;i<=t;i++){
  25. n=read(),m=read(),h=read();
  26. memset(f,-,sizeof(f));
  27. f[]=; int last=;
  28. for(int j=;f[(last+m)%n]==-;j++) f[(last+m)%n]=f[last]+m,last=(last+m)%n;
  29. int ans=;
  30. for(int i=;i<n;i++)
  31. if(f[i]!=-&&f[i]<=h) ans+=(h-f[i])/n+;
  32. printf("%lld\n",h-ans+);
  33. }
  34. return ;
  35. }

T2:Walk

【问题描述】
给定一棵 n 个节点的树,每条边的长度为 1,同时有一个权值
w。定义一条路径的权值为路径上所有边的权值的最大公约数。现在
对于任意 i∈[1,n],求树上所有长度为 i 的简单路径中权值最大的
是多少。如果不存在长度为 i 的路径,则第 i 行输出 0。
【输入格式】
第一行,一个整数 n,表示树的大小。
接下来 n-1 行,每行三个整数 u,v,w,表示 u,v 间存在一条权值
为 w 的边。
【输出格式】
对于每种长度,输出一行,表示答案。

考试的时候先打了30分的暴力,然后看了几组大数据,发现当边长很大时全部都是0,然后又在保证30分的情况下,牺牲部分正确性换取时间,如果广搜时深度达大于1000层就不往下更新了,然而并没有什么用...最后还是30分...

30分做法:O(n)枚举起点 对于每一个起点跑一个BFS,搜索同时记录深度、当前路径深度(可以开3个队列),对于每一个深度更新答案(取最大值)

满分做法:“这种题目一看就是要枚举gcd的!”——By bztMinamoto

      枚举边的gcd值(x),每次把是x的倍数的边加入新图,构成一个森林,然后把里面的树里面的最长链(直径)作为长度更新答案(题目里面的图的下标是边的权值,便于遍历边的时候最快找到)

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. inline int read(){
  7. char chr=getchar(); int f=,ans=;
  8. while(!isdigit(chr)) {if(chr=='-') f=-;chr=getchar();}
  9. while(isdigit(chr)) {ans=(ans<<)+(ans<<);ans+=chr-'';chr=getchar();}
  10. return ans*f;
  11. }
  12. void write(int x){
  13. if(x<) putchar('-'),x=-x;
  14. if(x>) write(x/);
  15. putchar(x%+'');
  16. }
  17. const int N=4e5+;
  18. struct node{int x,y,nxt;}e[N],edge[N<<];
  19. int st[N],sta[N<<],tt=,tot=;
  20. int p[N<<],num=;
  21. int ans[N],mxlen,mx,n,link[N<<];
  22. inline void Add(int u,int w,int z){e[++tt]={u,w,sta[z]};sta[z]=tt;}//建立原图
  23. inline void add(int u,int w){edge[++tot]={u,w,st[u]};st[u]=tot;link[tot]=u;edge[++tot]={w,u,st[w]};st[w]=tot;link[tot]=w;}//新图
  24. int dfs(int now){//求树的直径,不讲...
  25. p[now]=num;
  26. int son=;
  27. for(int i=st[now];i;i=edge[i].nxt){
  28. if(p[edge[i].y]==num) continue;
  29. int r=dfs(edge[i].y);
  30. mxlen=max(mxlen,r+son+);
  31. son=max(son,r+);
  32. }return son;
  33. }
  34. int main(){
  35. freopen("walk.in","r",stdin);
  36. freopen("walk.out","w",stdout);
  37. n=read();
  38. for(int i=;i<n;i++){
  39. int u=read(),w=read(),z=read();
  40. mx=max(mx,z);Add(u,w,z);
  41. }
  42. for(int i=;i<=mx;i++){//枚举gcd
  43. for(int j=i;j<=mx;j+=i)
  44. for(int k=sta[j];k;k=e[k].nxt)add(e[k].x,e[k].y);//建新图
  45. mxlen=,num++;
  46. for(int k=;k<=tot;k++)
  47. if(p[link[k]]!=num) dfs(link[k]);//求直径
  48. for(int k=;k<=tot;k++) st[link[k]]=;
  49. tot=;ans[mxlen]=i;//更新答案
  50. }
  51. for(int i=n-;i>;i--) ans[i]=max(ans[i],ans[i+]);
  52. for(int i=;i<=n;i++)printf("%d\n",ans[i]);
  53. return ;
  54. }

【寒假集训系列DAY3】的更多相关文章

  1. 【寒假集训系列DAY.1】

    Problem A. String Master(master.c/cpp/pas) 题目描述 所谓最长公共子串,比如串 A:“abcde”,串 B:“jcdkl”,则它们的最长公共子串为串 “cd” ...

  2. 8.6 正睿暑期集训营 Day3

    目录 2018.8.6 正睿暑期集训营 Day3 A 亵渎(DP) B 绕口令(KMP) C 最远点(LCT) 考试代码 A B C 2018.8.6 正睿暑期集训营 Day3 时间:5h(实际) 期 ...

  3. CSU-ACM寒假集训选拔-入门题

    CSU-ACM寒假集训选拔-入门题 仅选择部分有价值的题 J(2165): 时间旅行 Description 假设 Bobo 位于时间轴(数轴)上 t0 点,他要使用时间机器回到区间 (0, h] 中 ...

  4. 2022寒假集训day3

    day3:四道检测题,花了大半天时间. T1 子集和问题 问题描述 子集和问题的一个实例为<S,c>.其中S={x1,x2,-,xn}是一个正整数的集合,c是一个正整数.子集和问题判定是否 ...

  5. 【集训Day3 单调队列】【2018寒假集训Day 5更新】最大子序列和

    最大子序列和(maxsum) [问题描述] 输入一个长度为n的整数序列(A1,A2,……,An),从中找出一段连续的长度不超过M的子序列,使得这个序列的和最大. 例如: 序列 1, -3, 5, 1, ...

  6. HZNU-ACM寒假集训Day3小结 搜索

    简单搜索 1.DFS UVA 548 树 1.可以用数组方式实现二叉树,在申请结点时仍用“动态化静态”的思想,写newnode函数 2.给定二叉树的中序遍历和后序遍历,可以构造出这棵二叉树,方法是根据 ...

  7. 中南大学2019年ACM寒假集训前期训练题集(基础题)

    先写一部分,持续到更新完. A: 寒衣调 Description 男从戎,女守家.一夜,狼烟四起,男战死沙场.从此一道黄泉,两地离别.最后,女终于在等待中老去逝去.逝去的最后是换尽一生等到的相逢和团圆 ...

  8. 2022寒假集训day2

    day1:学习seach和回溯,初步了解. day2:深度优化搜索 T1 洛谷P157:https://www.luogu.com.cn/problem/P1157 题目描述 排列与组合是常用的数学方 ...

  9. ACM集训的Day3 B。。。盲目搜索之DFS。。。

    milk 一.题目描述: gzp有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数, 最初,A和B桶都是空的,而C桶是装满牛奶的.有时,农民把牛奶从一个桶倒到 另一个桶中,直到被灌 ...

随机推荐

  1. 使用ScriptManager服务器控件前后台数据交互

    前台页面信息: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebFor ...

  2. centOS7卸载google-chrome

    参考: https://www.jianshu.com/p/39d0b8f578d9

  3. sudo dpkg-reconfigure phpmyadmin命令,重新配置一遍phpmyadmin

    sudo dpkg-reconfigure phpmyadmin命令,重新配置一遍phpmyadmin

  4. python常用三方库 - openpyxl

    目录 python常用三方库 - openpyxl 读取Excel文件 写入Excel文件 python常用三方库 - openpyxl openpyxl是一个第三方库, 可以处理xlsx格式的Exc ...

  5. PAT 1093. Count PAT's

    The string APPAPT contains two PAT's as substrings. The first one is formed by the 2nd, the 4th, and ...

  6. 《你说对就队》第八次团队作业:Alpha冲刺 第五天

    <你说对就队>第八次团队作业:Alpha冲刺 第五天 项目 内容 这个作业属于哪个课程 [教师博客主页链接] 这个作业的要求在哪里 [作业链接地址] 团队名称 <你说对就队> ...

  7. 强悍的 ubuntu —— 命令行访问网页

    所谓以命令行的方式访问网页,即是在终端下以文本的形式访问网站,这里推荐一个工具:w3m, $ sudo apt-get install w3m $ w3m www.baidu.com

  8. [Codeforces 872]比赛记录

    强行打了$cf$上的第一场比赛,现在感觉自己的$rating$会炸飞= = A  这是练习输入输出吗QAQ,竟然$WA$了两遍QAQ,我$WA$的一声就哭了出来啊QAQ B  好像很水的乱扫就好了,m ...

  9. [UOJ#35] [UOJ后缀数组模板题] 后缀排序 [后缀数组模板]

    后缀数组,解决字符串问题的有利工具,本题代码为倍增SA算法 具体解释详见2009年国家集训队论文 #include <iostream> #include <algorithm> ...

  10. 同余方程 2012年NOIP全国联赛提高组

    时间限制: 1 s   空间限制: 128000 KB 题目描述 Description 求关于 x 同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入描述 Input Descriptio ...