记codevs第一次月赛
第一次参加这种有奖励的比赛(没错,我就是为猴子而去的
一年没怎么碰代码果然手生,还是用没写多久的C++,差点全跪了
T1数学奇才琪露诺:
首先定义一个函数F(x),F(x)=x的各个数位上的数字和
然后在区间[l,r]求F(x)k*p+q=x的所有x,按升序输出
T1题解:
枚举x肯定是不行的,F(x)的值只有0到81,我们枚举F(x)的值,然后算出F(x)k*p+q,看数位和是不是符合
可能会爆int,所以要开long long
- #include <cstdio>
- #include <algorithm>
- #include <vector>
- #include <set>
- using namespace std;
- long long k,p,q,l,r,a[],tot;
- long long s(long long x){
- long long ss=;
- while(x>){
- ss+=x%;
- x=x/;
- }
- return ss;
- }
- long long pow(long long x,long long y){
- long long ipow=;
- long long i;
- for(i=;i<=y;++i)ipow=ipow*x;
- return ipow;
- }
- int main(){
- scanf("%lld%lld%lld%lld%lld",&k,&p,&q,&l,&r);
- long long i;
- tot=;
- for(i=;i<=;++i){
- long long tmp;
- tmp=pow(i,k)*p+q;
- if((tmp>=)&&(s(tmp)==i)&&(tmp>=l)&&(tmp<=r))a[++tot]=tmp;
- }
- sort(a+,a++tot);
- printf("%lld\n",tot);
- for(i=;i<=tot;++i)printf("%lld ",a[i]);
- return ;
- }
T1
T2完美拓印:
给你一条轮廓线和一个印章,问有多少种方法可以让印章的一条边缘(上下两边)与轮廓线重合,印章可以180°旋转
T2题解:
我们注意到只要相邻两格的高度差一样就行,所以我们把相邻两项的差拿出来做kmp就行了
注意要做四次kmp,下面平的也要考虑,还有就是特判n=1的情况
- #include <cstdio>
- #include <algorithm>
- #include <vector>
- #include <set>
- using namespace std;
- int n,m,a[],b[],nex[],ans;
- int work(){
- int i,j;
- for(i=n-;i>;--i)a[i]=a[i-]-a[i];
- nex[]=;
- nex[]=;
- for(i=;i<n;++i){
- j=nex[i-];
- while((j>)&&(a[i]!=a[j+]))j=nex[j];
- if(a[i]==a[j+])nex[i]=j+;
- else nex[i]=;
- }
- i=;j=;
- while(j<m-){
- if(a[i+]==b[j+])++i,++j;
- else
- if(i==)++j;
- else i=nex[i];
- if(i==n-){
- ++ans;
- i=nex[i];
- }
- }
- for(i=;i<n;++i)a[i]=a[i-]-a[i];
- return ;
- }
- int swap(int &a,int &b){
- int t;
- t=a;a=b;b=t;
- return ;
- }
- int main(){
- int i;
- ans=;
- scanf("%d%d",&n,&m);
- for(i=;i<n;++i)scanf("%d",&a[i]);
- for(i=;i<m;++i)scanf("%d",&b[i]);
- if(n==){
- printf("%d\n",*m);
- return ;
- }
- for(i=m-;i>;--i)b[i]=b[i-]-b[i];
- work();
- for(i=;i<n/;++i)swap(a[i],a[n-i-]);
- for(i=;i<n;++i)a[i]=-a[i];
- work();
- for(i=;i<n;++i)a[i]=;
- work();
- work();
- printf("%d\n",ans);
- return ;
- }
T2
T3幻影阁的难题:
给你两棵树,你可以分别在两棵树上找一个点,然后在这两个点之间连一条长度为t的边
1.求连边之后最长路的最小值
2.求最长路的期望长度
T3题解:
首先我们看第一问,我们只要树dp算出从某个点出发的最长链,然后取两棵树的最小值相加再加t,但是我们还要考虑不经过新边的情况,那么就是原来树上的最长链,从这两个中取最大值就行了
第二问要求期望,所以我们要把所有的情况都算出来,然后总长除以n*m,我们先把两棵树计算好的最长链排好序
然后我们要计算的就是∑max(最长链,a[i]+b[j]),因为我们排好了序,所以对于每一个i,取最长链的是一段连续的区间,我们只要记一下前缀和就可以快速计算了
- #include <cstdio>
- #include <algorithm>
- #include <vector>
- #include <set>
- using namespace std;
- long long n,m,t,tot;
- long long nex[],las[],l[],aa[];
- long long s1[],s2[],fa[],fir[],q[],len[];
- bool f[];
- long long ss2[],g[];
- long long ans,ans1,ans2;
- int insert(int x,int y,int z){
- ++tot;
- l[tot]=z;
- las[tot]=y;
- nex[tot]=fir[x];
- fir[x]=tot;
- }
- int work(){
- int i,x,y,z;
- tot=;
- for(i=;i<=n;++i)fir[i]=,f[i]=false,s1[i]=,s2[i]=;
- for(i=;i<n;++i){
- scanf("%d%d%d",&x,&y,&z);
- insert(x,y,z);
- insert(y,x,z);
- }
- f[]=true;
- int ll,rr;
- ll=;rr=;
- q[]=;
- for(;ll<=rr;++ll){
- int j;
- for(j=fir[q[ll]];j!=;j=nex[j])
- if(!f[las[j]]){
- f[las[j]]=true;
- q[++rr]=las[j];
- len[rr]=l[j];
- fa[rr]=ll;
- }
- }
- len[]=;g[]=;
- s1[]=;s2[]=;
- for(i=n;i>;--i){
- if(s1[i]+len[i]>s1[fa[i]])s2[fa[i]]=s1[fa[i]],s1[fa[i]]=s1[i]+len[i];
- else
- if(s1[i]+len[i]>s2[fa[i]])s2[fa[i]]=s1[i]+len[i];
- }
- long long tmp=;
- for(i=;i<=n;++i){
- if(s1[i]+len[i]!=s1[fa[i]])g[i]=s1[fa[i]]+len[i];
- else g[i]=s2[fa[i]]+len[i];
- g[i]=max(g[i],g[fa[i]]+len[i]);
- tmp=min(tmp,max(g[i],s1[i]));
- ans1=max(ans1,g[i]+s1[i]);
- }
- ans2+=tmp;
- return ;
- }
- long long gcd(long long a,long long b){
- if(b==)return a;
- return gcd(b,a%b);
- }
- int main(){
- scanf("%d%d%d",&n,&m,&t);
- ans=;ans1=;ans2=;
- work();
- int i,j;
- for(i=;i<=n;++i)aa[i]=max(g[i],s1[i]);
- swap(n,m);
- work();
- for(i=;i<=n;++i)g[i]=max(g[i],s1[i]);
- sort(aa+,aa++m);
- sort(g+,g++n);
- ans1-=t;
- ss2[]=aa[];
- for(i=;i<=m;++i)ss2[i]=ss2[i-]+aa[i];
- j=m;
- for(i=;i<=n;++i){
- while((j>)&&(g[i]+aa[j]>ans1))--j;
- ans+=ans1*j+g[i]*(m-j)+ss2[m]-ss2[j];
- }
- ans+=t*n*m;
- ans2=max(ans2+t,ans1+t);
- printf("%lld\n",ans2);
- long long tmp;
- tmp=gcd(ans,n*m);
- printf("%lld",ans/tmp);
- printf("/");
- printf("%lld",n*m/tmp);
- return ;
- }
T3
记codevs第一次月赛的更多相关文章
- 记次浙大月赛 134 - ZOJ Monthly, June 2014
链接 虽做出的很少,也记录下来,留着以后来补..浙大题目质量还是很高的 B 并查集的一些操作,同类和不同类我是根据到根节点距离的奇偶判断的,删点是直接新加一个点,记得福大月赛也做过类似的,并差集的这类 ...
- Contest1063 - 2017广东工业大学第一次月赛-部分题解
Problem A: Chiruno Description 五年前,Aerix 无意间飞到了幻想乡,然后遇到了传说中的⑨酱,心情非常激动,想和她合影留念,但是⑨酱比较傲娇,她只欣赏算数能力强的,也不 ...
- 洛谷4059找爸爸(Code+第一次月赛)
题目:https://www.luogu.org/problemnew/show/P4059 dp. 1.看出-A-B(k-1)可以理解成连续空格的第一个 -A,其余 -B: 2.把会干扰的“上一步右 ...
- Codeforces Round #477滚粗记&&祭第一次div2场
4.29 - 23:58:现在似乎在ST的样子……先等一波 Day4.29 prescript : 难得遇上一场9:00开始的div2,看了看大家都打,索性也当一回神仙吧. 晚上出去吃饭,匆匆赶回家, ...
- 记:第一次更新服务器CUDA和GPU驱动
因有需求需要改动centos7中的CUDA(更新到10)和GUP 的driver(更新到410)的版本. 事先需要查看原版本的信息,使用nvidia-smi可以查看driver的版本信息(最新的也显示 ...
- 2019级第一次月赛暨ACM工作室第一次招新赛、补题赛
A:最简单签到,没有之一 Description 此题简单如题意,就是求最大值 Input 多组输入 每组输入输入一串字符串(包括字母和数字),长度小于500 Output 每行输出字符ASCII值与 ...
- 【日常学习】codevs1287 矩阵乘法题解
转载请注明出处 [ametake版权全部]http://blog.csdn.net/ametake欢迎来看. 先上题目 题目描写叙述 Description 小明近期在为线性代数而头疼,线性代数确实非 ...
- 洛谷2019 3月月赛 T1
题干 2019第一次月赛 我只有255pts T1还是比较水的... 海星 T1一道简单的模拟(就是有坑..导致很多人不能一次性AC 比如说我) _3个坑点 1.位数问题 2.-0 3.0... #i ...
- P6686 混凝土数学
哈哈哈!我爱月赛. 第一次月赛拿到分呢. (卡掉卡掉) 题目描述 你正在看混凝土数学,这时旁边的工地开工了,你觉得看他们施工更有意思,于是你向窗外望去,注意到了一些长度不同的木棍.具体而言,你看到了 ...
随机推荐
- jquery加载页面的方法(页面加载完成就执行)
jquery加载页面的方法(页面加载完成就执行),建议大家看下windows.onload与$(document).ready之间的区别. 1.$(function(){ $("#a&qu ...
- thinkphp二维数组模板输出方法
thinkphp二维数组模板输出方法 先写个记录,有空再整理发上来
- leetcode刷题笔记
(1)Best Time to Buy and Sell Stock Total Accepted: 10430 Total Submissions: 33800My Submissions Say ...
- 一个自定义的C#数据库操作基础类 SqlHelper
SqlHelper其实是我们自己编写的一个类,使用这个类目的就是让使用者更方便.更安全的对数据库的操作,既是除了在SqlHelper类以外的所有类将不用引用对数据库操作的任何类与语句,无须担心数据库的 ...
- Learning Scrapy笔记(七)- Scrapy根据Excel文件运行多个爬虫
摘要:根据Excel文件配置运行多个爬虫 很多时候,我们都需要为每一个单独的网站编写一个爬虫,但有一些情况是你要爬取的几个网站的唯一不同之处在于Xpath表达式不同,此时要分别为每一个网站编写一个爬虫 ...
- Python学习教程(learning Python)--3.3 分支语句的条件表达式详解
本节主要讨论分支语句的条件表达式问题. 在if或者if-else分支控制语句里由于都用到条件判断(表达式是真还是假),条件判断可以是一种关系运算也可以是布尔表达式. 本节将对if及if-else语句的 ...
- Linux 常见的进程调度算法
1.在介绍进程调度之前,先对进程的状态的概念应该有所了解,下面是关于进程状态的一些基本概念:进程的状态分为三种,分别为: 1).运行态:该状态表明进程在实际占用CPU 2).就绪态: 该状态下进程可以 ...
- .net 动态编译解决考勤计算问题
由于公司实施SAP HR项目,但是SAP HR对考勤功能真的太弱化了,直接从考勤机上读取的原始打卡记录不能直接传输到HR系统里面,因为SAP HR不能识别那些多余的打卡记录,而且必须把打卡记录进行成组 ...
- EMVTag系列9《卡片管理数据》
Ø 5F30 服务码 F: n 3 T: 5F30 L: 2 -O(可选):可选数据元 按GB/T 17552标准,卡片中的服务码(5F30) 的值,要和二磁道等效数据57中的服务码的值完全一 ...
- DB2查看用户表与指定用户表表结构
1.在dos中查看用户表 1.1查看表 DB2 LIST TABLES FOR USER 1.2 查看表结构 DB2 describe table A 2.在DB2连接工具中(这里以SQLdbx为例子 ...