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(当然数学方法也可以,但是好烦啊...)类似于背包?反正暴力填表就好了..把“好的数”求出来,然后减一下就好了

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
using namespace std;
inline int read(){
char chr=getchar(); int f=,ans=;
while(!isdigit(chr)) {if(chr=='-') f=-;chr=getchar();}
while(isdigit(chr)) {ans=(ans<<)+(ans<<);ans+=chr-'';chr=getchar();}
return ans*f;
}
void write(int x){
if(x<) putchar('-'),x=-x;
if(x>) write(x/);
putchar(x%+'');
}
int n,m,h,f[];
signed main(){
freopen("simple.in","r",stdin);
freopen("simple.out","w",stdout);
int t=;
t=read();
for(int i=;i<=t;i++){
n=read(),m=read(),h=read();
memset(f,-,sizeof(f));
f[]=; int last=;
for(int j=;f[(last+m)%n]==-;j++) f[(last+m)%n]=f[last]+m,last=(last+m)%n;
int ans=;
for(int i=;i<n;i++)
if(f[i]!=-&&f[i]<=h) ans+=(h-f[i])/n+;
printf("%lld\n",h-ans+);
}
return ;
}

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的倍数的边加入新图,构成一个森林,然后把里面的树里面的最长链(直径)作为长度更新答案(题目里面的图的下标是边的权值,便于遍历边的时候最快找到)

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
inline int read(){
char chr=getchar(); int f=,ans=;
while(!isdigit(chr)) {if(chr=='-') f=-;chr=getchar();}
while(isdigit(chr)) {ans=(ans<<)+(ans<<);ans+=chr-'';chr=getchar();}
return ans*f;
}
void write(int x){
if(x<) putchar('-'),x=-x;
if(x>) write(x/);
putchar(x%+'');
}
const int N=4e5+;
struct node{int x,y,nxt;}e[N],edge[N<<];
int st[N],sta[N<<],tt=,tot=;
int p[N<<],num=;
int ans[N],mxlen,mx,n,link[N<<];
inline void Add(int u,int w,int z){e[++tt]={u,w,sta[z]};sta[z]=tt;}//建立原图
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;}//新图
int dfs(int now){//求树的直径,不讲...
p[now]=num;
int son=;
for(int i=st[now];i;i=edge[i].nxt){
if(p[edge[i].y]==num) continue;
int r=dfs(edge[i].y);
mxlen=max(mxlen,r+son+);
son=max(son,r+);
}return son;
}
int main(){
freopen("walk.in","r",stdin);
freopen("walk.out","w",stdout);
n=read();
for(int i=;i<n;i++){
int u=read(),w=read(),z=read();
mx=max(mx,z);Add(u,w,z);
}
for(int i=;i<=mx;i++){//枚举gcd
for(int j=i;j<=mx;j+=i)
for(int k=sta[j];k;k=e[k].nxt)add(e[k].x,e[k].y);//建新图
mxlen=,num++;
for(int k=;k<=tot;k++)
if(p[link[k]]!=num) dfs(link[k]);//求直径
for(int k=;k<=tot;k++) st[link[k]]=;
tot=;ans[mxlen]=i;//更新答案
}
for(int i=n-;i>;i--) ans[i]=max(ans[i],ans[i+]);
for(int i=;i<=n;i++)printf("%d\n",ans[i]);
return ;
}

【寒假集训系列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. 【原】Python学习_Django搭建环境及创建第一个项目

    1.Window 平台安装 Python 下载安装包    https://www.python.org/downloads/windows/ 2.Pyhton环境变量配置 右键点击"计算机 ...

  2. 最基础的rpm命令

    rpm -ivh package.rpm 安装一个rpm包 rpm -ivh --nodeeps package.rpm 安装一个rpm包而忽略依赖关系警告 rpm -U package.rpm 更新 ...

  3. Linux之网络文件共享服务(FTP)

    一.FTP概念 •File Transfer Protocol 早期的三个应用级协议之一 •基于C/S结构 •双通道协议:数据和命令连接 •数据传输格式:二进制(默认)和文本  •两种模式:服务器角度 ...

  4. 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 ...

  5. javascript 闭包笔记

      先来解释一下闭包: 1.闭包就是函数嵌套函数 2.内部函数可以引用外部函数的参数和变量 3.参数和变量不会被垃圾回收机制所收回( 垃圾回收机制就是用完变量之后就在内存中释放 ) 使用闭包的好处: ...

  6. ssh_整合总结

    开场白:首先,我先帮大家整理一下思路 准备: 数据库,表,数据 jar 包准备 Hibernate 基本jar 包 C3p0 数据库连接池 Spring AOP 基本包 Spring Ioc 基本包 ...

  7. GPS时间系统概述和世界时系统

    6.1  GPS时间系统概述 时间包含"时刻"和"时间间隔"2个概念.所谓时刻,即发生某一现象的瞬间.在天文学和卫星定位中.与所获数据对应的时刻也称为历元.时间 ...

  8. K - Count the string kmp_Next数组应用

    It is well known that AekdyCoin is good at string problems as well as number theory problems. When g ...

  9. cogs 167. [USACO Mar07] 月度花费

    167. [USACO Mar07] 月度花费 ★★   输入文件:expense.in   输出文件:expense.out   简单对比时间限制:1 s   内存限制:128 MB Farmer ...

  10. [Python]croppic 裁剪图片的Python后台实现

    import cStringIO import io import base64 from PIL import Image, ImageTk def img_crop_to_file(request ...