ATPの水题大赛

  声明:不是我觉得这题水,这就是本场模拟赛的名称。

  T1:求所有的$n$位数中有几个数满足:每一位要么是$A$要么是$B$,并且这个$n$位数的每一位加起来是$A$或$B$的倍数。

  $n<=100000,0<A,B<=9$且$A$与$B$不相等

  因为昨天刚讲了数位$dp$,理所当然的就往那方面去想了.其实用组合数学也可以做,而且还比较简短.

  用$f[i][j][k]$表示目前填到第$i$位,对$a$取模余数为$j$,对$b$取模余数为$k$的方案数.滚动数组,空间可以压得非常小.

  

 # include <cstdio>
# include <iostream>
# include <cstring>
# include <string>
# define R register int
# define mod using namespace std; const int maxn=;
int dp[][][];
int a,b,n,ans,no,nex; inline int ad (int a,int b) { a=a+b; if(a>=mod) a-=mod; return a; } int solve ()
{
dp[][][]=;
for (R i=;i<n;++i)
{
no=i&;
nex=no^;
memset(dp[nex],,sizeof(dp[nex]));
for (R m1=;m1<a;++m1)
for (R m2=;m2<b;++m2)
{
if(!dp[no][m1][m2]) continue;
dp[nex][m1][(m2+a)%b]=ad(dp[no][m1][m2],dp[nex][m1][(m2+a)%b]);
dp[nex][(m1+b)%a][m2]=ad(dp[no][m1][m2],dp[nex][(m1+b)%a][m2]);
}
}
int ans=;
for (R m1=;m1<a;++m1)
for (R m2=;m2<b;++m2)
if(m1==||m2==) ans=ad(ans,dp[n&][m1][m2]);
return ans;
} int main()
{
scanf("%d%d%d",&n,&a,&b);
printf("%d",solve());
return ;
}

T1

  T2:求逆序对数量*360。没了。 

  

 # include <cstdio>
# include <iostream>
# include <cstring>
# include <string>
# include <algorithm>
# define R register int
# define lowbit(i) (i&(-i))
# define mod using namespace std; const int maxn=;
struct nod
{
int key,val;
}a[maxn];
int n,v[maxn];
int t[maxn],ans,cnt; bool cmp (nod a,nod b) { return a.val<b.val; } void add (int pos,int val)
{
for (R i=pos;i<=cnt;i+=lowbit(i)) t[i]+=val;
} int ask (int pos)
{
int ans=;
for (R i=pos;i;i-=lowbit(i)) ans+=t[i];
return ans;
} int main()
{
scanf("%d",&n);
for (R i=;i<=n;++i)
scanf("%d",&a[i].val),a[i].key=i;
sort(a+,a++n,cmp);
a[].val=a[].val+;
for (R i=;i<=n;++i)
{
if(a[i].val!=a[i-].val) ++cnt;
v[ a[i].key ]=cnt;
}
for (R i=;i<=n;++i)
{
ans+=ask(cnt)-ask(v[i]);
if(ans>=mod) ans-=mod;
add(v[i],);
}
ans=(long long)ans*%mod;
printf("%d",ans);
return ;
}

T2

  T3:给定一棵正边权的树,求离每个点最远的点有多远;

  有一个定理:离每个点最远的点必然是直径端点上的一点,不过...我不是这么做的。

  以任意点为端点的最长路要么在它的子树里面,要么是从父亲走过来的,经典的$up and down$题目.注意,父亲的最长路有可能本来就是从自己这里走过去的,再用父亲来更新就会走重复的路径了.那怎么办呢?再记录一条次长路径即可,细节什么的...自己想吧。 

  

 # include <cstdio>
# include <iostream>
# include <cstring>
# include <string>
# define R register int using namespace std; const int maxn=;
int n,h,x,y,co,firs[maxn],dep[maxn],m1[maxn],m2[maxn];
struct edge
{
int too,nex,co;
}g[maxn<<]; int read()
{
int x=,f=;
char c=getchar();
while (!isdigit(c)) { if(c=='-') f=-f; c=getchar(); }
while (isdigit(c)) { x=(x<<)+(x<<)+(c^); c=getchar(); }
return x*f;
} void add (int x,int y,int co)
{
g[++h].too=y;
g[h].co=co;
g[h].nex=firs[x];
firs[x]=h;
} void upp (int x)
{
int j,len;
for (R i=firs[x];i;i=g[i].nex)
{
j=g[i].too;
if(dep[j]) continue;
dep[j]=dep[x]+;
upp(j);
len=m1[j]+g[i].co;
if(len>m1[x]) m2[x]=m1[x],m1[x]=len;
else if(len==m1[x]) m2[x]=len;
else m2[x]=max(m2[x],len);
}
} void dowwn (int x)
{
int j,len;
for (R i=firs[x];i;i=g[i].nex)
{
j=g[i].too;
if(dep[j]<dep[x]) continue;
len=m1[x];
if(len==m1[j]+g[i].co) len=m2[x];
len+=g[i].co;
if(len>m1[j]) m1[j]=len;
else if(len==m1[j]) m2[j]=len;
else m2[j]=max(m2[j],len);
dowwn(j);
}
} int main()
{
n=read();
for (R i=;i<n;++i)
{
x=read(),y=read(),co=read();
add(x,y,co);
add(y,x,co);
}
dep[]=;
upp();
dowwn();
for (R i=;i<n;++i)
printf("%d ",m1[i]);
printf("%d",m1[n]);
return ;
}

T3

  T4:带修改动态逆序对。

  $n$为序列长度,$m$为修改次数.

  

  这题好啊,不用写代码,只需要写一个做法的$txt$,学姐看做法给分qwq.正好是只会说不会写.

  

  这个做法竟然被给了满分QAQ

  ---shzr

ATP学姐的模拟赛的更多相关文章

  1. 学军NOIP2016模拟赛1

    GTMD这么水的一套题没有AK T1:妥妥的二分答案,贪心check. T2:问题可以转化为最长上升(还是下降我记不住了)子序列. T3:发现点被覆盖上的顺序是一定的.求出这个顺序,第一个操作在线段树 ...

  2. 2014.11.12模拟赛【美妙的数字】| vijos1904学姐的幸运数字

    美妙的数字(number.c/.cpp/.pas) 题目描述 黄巨大认为非负整数是美妙的,并且它的数值越小就越美妙.当然0是最美妙的啦. 现在他得到一串非负整数,对于每个数都可以选择先对它做二进制非运 ...

  3. 嘉馨学姐又双叒叕来吃包子了 QDUOJ 模拟 尺度法

    嘉馨学姐又双叒叕来吃包子了 QDUOJ 模拟 尺度法 点我进入OJ题目详情 题意 给你一串数,让你求长度最长的子串,这个字串满足里面没有重复出现的数字. 解题思路 使用一个标记数组,来标记每个数的第一 ...

  4. NOIP 模拟赛 那些年,我们学过的文化课 --致已退役的fqk神犇.

    /* 这大概是我第一次整理模拟赛吧. 唉. T2打了很长时间. 一开始读错题了中间都能缩合了. 真心对不起生物老师hhh. 这种状态判重的题目还是做的太少! */ 背单词 [题目描述] fqk 退役后 ...

  5. 『2019/4/8 TGDay1模拟赛 反思与总结』

    2019/4/8 TGDay1模拟赛 这次是和高一的学长学姐们一起参加的\(TG\)模拟考,虽然说是\(Day1\),但是难度还是很大的,感觉比\(18\)年的\(Day1\)难多了. 还是看一下试题 ...

  6. NOIP模拟赛-2018.10.22

    模拟赛 今天第一节课是历史,当然是不可能上的,一来到机房发现今天高二考试... 老师说以后可能还要给高一考...那还不如现在跟着做好了,毕竟在学长学姐中垫底显得没那么丢人 这套题风格挺奇怪的...为什 ...

  7. [GRYZ]寒假模拟赛

    写在前面 这是首次广饶一中的OIERS自编自导,自出自做(zuo)的模拟赛. 鉴于水平气压比较低,机(wei)智(suo)的WMY/XYD/HYXZC就上网FQ下海找了不少水(fei)题,经过他们优( ...

  8. 『2019/4/9 TGDay2模拟赛 反思与总结』

    2019/4/9 TGDay2模拟赛 今天是\(TG\)模拟赛的第二天了,试题难度也是相应地增加了一些,老师也说过,这就是提高组的难度了.刚开始学难的内容,一道正解也没想出来,不过基本的思路也都是对了 ...

  9. Shallwe学长的模拟赛

    NOIP Simulated Test 这个名字一听就很高端. T1:sGCD:http://uoj.ac/problem/48 题意概述:给定一个长度为$n$的序列,求$sgcd(a_1,a_i)$ ...

随机推荐

  1. 本地SQL数据库执行作业定时修改其他数据库内容

    --exec sp_addlinkedserver 'xkp', ' ', 'SQLOLEDB', '192.168.66.66'  定义链接--exec sp_addlinkedsrvlogin ' ...

  2. 月赛 && SX_ACM 惨痛教训

    1.cnt变量若有多次询问,一定要记得初始化!!! 2.多组数据输出入,区泛~. 3.高性能问题,考虑位运算,

  3. [日常] Go语言圣经-竞争条件习题

    package main import( "fmt" "sync" ) var balance int func Deposit(amount int) { b ...

  4. 15.C++-操作符重载、并实现复数类

    首先回忆下以前学的函数重载 函数重载 函数重载的本质为相互独立的不同函数 通过函数名和函数参数来确定函数调用 无法直接通过函数名得到重载函数的入口地址 函数重载必然发生在同一个作用域中 类中的函数重载 ...

  5. git 提交规范

    git 提交规范 前言 无规矩不成方圆,编程也一样. 如果你有一个项目,从始至终都是自己写,那么你想怎么写都可以,没有人可以干预你.可是如果在团队协作中,大家都张扬个性,那么代码将会是一团糟,好好的项 ...

  6. 3.Decorator Pattern(装饰者模式)

    装饰者模式: 动态地将责任附加到对象上.想要扩展功能,装饰者提供有别于继承的另一种选择. 举例: 不知道大家学校的食堂是什么点餐制度(或者大家就直接想成吃火锅,我们要火锅料 + 配菜),我们学校的点餐 ...

  7. 一道很好的mysql面试练习题,having综合应用

    写一条SQL语句,求出2门以及2门以上不及格的科目平均分 >要出现2门以及2门以上的学科不及格 >计算该考生所有学科的平均分,不单是,不及格的那几门 #创建表: create table ...

  8. JS 为什么在涉及到模块开发this的时候使用类似 self = this 的形式 p7

    JS 动态作用域(调用栈)实际上也没有准确说明的,大多数我们使用对多和认知上大多是词法作用域,但是this的机制跟动态作用域很像. var a = 2; function fn(){ console. ...

  9. 前端开发笔记(3)css基础(中)

    上一篇中我们学习了html的标准文档流,下面我们先来看看如何脱离标准流. 脱离标准流 css中一共有三种方法脱离标准流 浮动 绝对定位 固定定位 浮动 我们要搞清楚什么是浮动,先来看一个标准文档流的例 ...

  10. SD从零开始25-28

    SD从零开始25 装运的组织单元(Organizational Units in Shipping) 组织结构-后勤Organizational Structure-Logistics Plant在后 ...