解题报告:


  傻逼错误天天犯QAQ

  第一题:简单DP,f[i][j]表示第 i 道题选 j 的最大得分,可以从f[i-1][j-1],f[i-1][j],f[i-1][j+1]转移过来,其实是可以滚动数组优化空间的,不过懒得弄了=。=反正能过

 //TYVJ A
#include<vector>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
using namespace std; int getint(){
int v=,sign=; char ch=getchar();
while(ch<''||ch>'') {if (ch=='-') sign=-; ch=getchar();}
while(ch>=''&&ch<='') {v=v*+ch-''; ch=getchar();}
return v*sign;
}
typedef long long LL;
const int N=,INF=~0u>>;
/*******************template********************/
int n,a[N],c[N],f[N][];
int main(){
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
// freopen("output.txt","w",stdout);
#endif
n=getint();
char s[];
F(i,,n){
scanf("%s",s);
a[i]=s[]-'A'+;
c[i]=getint();
}
F(i,,n) F(j,,){
f[i][j]=max(f[i-][j-],max(f[i-][j],f[i-][j+]))+
(j==a[i]?c[i]:);
}
int ans=;
F(j,,) ans=max(f[n][j],ans);
printf("%d\n",ans);
return ;
}

  第二题:数论题:求$$\sum_{i=1}^n \sum_{j=1}^m [gcd(i,j)是无平方因子的数]*gcd(i,j)$$

  昂……蒟蒻实在太弱了就爆零了= =

UPD:2015年5月1日 22:18:17

  题解:http://pan.baidu.com/s/1eQvTApW

  写法是学习的hzwer的……因为$n\leq 150W$所以其实筛出μ以后直接暴算g即可……反正O(nlogn)是不会爆的0.0

 //TYVJ B
#include<cmath>
#include<vector>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
using namespace std; int getint(){
int v=,sign=; char ch=getchar();
while(ch<''||ch>'') {if (ch=='-') sign=-; ch=getchar();}
while(ch>=''&&ch<='') {v=v*+ch-''; ch=getchar();}
return v*sign;
}
typedef long long LL;
const int N=,INF=~0u>>;
/*******************template********************/
int prime[N],tot,n,m,f[N],mu[N];
LL g[N];
bool check[N];
void getmu(int n){
mu[]=;
F(i,,n){
if (!check[i]){
prime[++tot]=i;
mu[i]=-;
}
F(j,,tot){
if (i*prime[j]>n) break;
check[i*prime[j]]=;
if (i%prime[j]==){
mu[i*prime[j]]=;
break;
}else mu[i*prime[j]]=-mu[i];
}
}
F(i,,n) if (mu[i]) f[i]=i;
F(i,,n) if (f[i])
for(int j=;j*i<=n;j++)
g[j*i]+=f[i]*mu[j];
F(i,,n) g[i]+=g[i-];
}
int main(){
#ifndef ONLINE_JUDGE
freopen("B.in","r",stdin);
// freopen("output.txt","w",stdout);
#endif
int T=getint();
getmu();
while(T--){
n=getint(); m=getint();
LL ans=;
if (n>m) swap(n,m);
for(int i=,last;i<=n;i=last+){
last=min(n/(n/i),m/(m/i));
ans+=(g[last]-g[i-])*(n/i)*(m/i);
}
printf("%I64d\n",ans);
}
return ;
}
//必须保证单次询问O(sqrt(N))的时间内搞定

  第三题:询问到树上两点距离$\leq K$的点的个数,强制在线。

  = =蒟蒻实在太弱,只能捡上白送的60分跑。

  60分做法:$n\leq 1000$,所以$n^2$的做法即可,那么处理出来dist[i][j]即任意两点间的距离,每次查询O(n)枚举即可,因为是树上距离,所以以每个点为根dfs一次即可求出dist[i][j]。

  第四题:太神了不会做,听说要用FWT?

  第五题:经典毒瘤题= =(神犇们都说是大水题Orz)因为取模每次必然使数折半,所以每个数最多取模log(a[i])次,那么每个数可以视为一开始有log(a[i])的能量,每次取模能量-1,单点修改可以视为给这个数重新充能。

  所以只要用线段树维护区间最大值(便于确定哪些数不用取模)和区间和,每次取模时在线段树上一路走到叶子进行修改,就可以AC啦~

  我是SB:每次query之前忘记把ans清零了!!!!f**k,一句话爆零系列。

 //TYVJ E
#include<vector>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
using namespace std;
typedef long long LL;
LL getLL(){
LL v=,sign=; char ch=getchar();
while(ch<''||ch>'') {if (ch=='-') sign=-; ch=getchar();}
while(ch>=''&&ch<='') {v=v*+ch-''; ch=getchar();}
return v*sign;
} const int N=,INF=~0u>>;
/*******************template********************/ LL mx[N<<],sum[N<<],a[N],n,m;
#define L (o<<1)
#define R (o<<1|1)
#define mid (l+r>>1)
void maintain(int o,int l,int r){
if (l==r) return;
mx[o]=max(mx[L],mx[R]);
sum[o]=sum[L]+sum[R];
}
void build(int o,int l,int r){
if (l==r) {
sum[o]=mx[o]=a[l];
}else{
build(L,l,mid);
build(R,mid+,r);
maintain(o,l,r);
}
}
void update(int o,int l,int r,int pos,LL v){
if (l==r) a[l]=mx[o]=sum[o]=v;
else{
if (pos<=mid) update(L,l,mid,pos,v);
else update(R,mid+,r,pos,v);
maintain(o,l,r);
}
}
int ql,qr;
void modify(int o,int l,int r,LL x){
if (ql>r || qr<l) return;
if (mx[o]<x) return;
if (l==r) a[l]=mx[o]=sum[o]=a[l]%x;
else{
modify(L,l,mid,x);
modify(R,mid+,r,x);
maintain(o,l,r);
}
}
LL ans;
void query(int o,int l,int r){
if (ql<=l && qr>=r) ans+=sum[o];
else{
if (ql<=mid) query(L,l,mid);
if (qr>mid) query(R,mid+,r);
}
}
int main(){
#ifndef ONLINE_JUDGE
freopen("E.in","r",stdin);
// freopen("output.txt","w",stdout);
#endif
n=getLL(); m=getLL();
F(i,,n) a[i]=getLL();
build(,,n);
LL cmd,l,k,x;
F(i,,m){
cmd=getLL(); l=getLL(); k=getLL();
if (cmd==){
ql=l; qr=k; ans=;
query(,,n);
printf("%I64d\n",ans);
}else if (cmd==){
x=getLL();
ql=l; qr=k;
modify(,,n,x);
}else{
update(,,n,l,k);
}
}
return ;
}

【tyvj五月有奖赛 暨Loi 55 Round #1】的更多相关文章

  1. 【TYVJ 五月图论专项有奖比赛】

    最短路+TSP+最小生成树+倍增LCA+TreeDP 第一题 其实是个TSP问题(然而我没发现),但是关键点很少,只有5个,所以用dij+heap分别预处理出来这五个点为源的最短路…… 然后枚举起点 ...

  2. 2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛 题解&源码

    Problem A: pigofzhou的巧克力棒 Description 众所周知,pigofzhou有许多妹子.有一天,pigofzhou得到了一根巧克力棒,他想把这根巧克力棒分给他的妹子们.具体 ...

  3. Python内置函数(55)——round

    英文文档: round(number[, ndigits]) Return the floating point value number rounded to ndigits digits afte ...

  4. 2017年中国大学生程序设计竞赛-中南地区赛暨第八届湘潭市大学生计算机程序设计大赛题解&源码(A.高斯消元,D,模拟,E,前缀和,F,LCS,H,Prim算法,I,胡搞,J,树状数组)

    A------------------------------------------------------------------------------------ 题目链接:http://20 ...

  5. 2019 年「计算机科学与工程学院」新生赛 暨ACM集训队选拔赛 # 1

    T1 请问这还是纸牌游戏吗 https://scut.online/p/567 这道题正解据说是方根 这里先放着等以后填坑吧qwq 但是由于这道题数据是随机的 所以其实是有各种水法的(但是我比赛根本没 ...

  6. ypACM社团年终赛暨实验室选拔赛题解

    记得补题,题目两小时半还是挺困难ak的,毕竟我验题也验了几天的时间,题目基本没有锅.题目基本属于简单题 我的三道题都是很基本的题目,希望大家补题 这些题解都是我写的,如果有疑问可以qq问我 所有的核心 ...

  7. DP思路

    在这里记录一些在大神们的博客,以及自己做过的一些DP的神奇思路吧 1.2015/04 NEUQ 月赛  转自:http://zyfzyf.is-programmer.com/posts/89993.h ...

  8. 【ContestHunter】【弱省胡策】【Round4】

    01分数规划(网络流)+状压DP+树形DP 官方题解地址:http://pan.baidu.com/s/1mg5S5z6 A 好神啊= =第一次写01分数规划 其实分数规划是要求$$ Maximize ...

  9. NOIp 0916 爆零记

    题目来自神犇chad 上次爆零是说着玩,这次真的爆零了QAQ 好吧貌似是TYVJ的模拟赛打多了..一直按照TYVJ的格式提交的压缩包.. 然后莫名其妙就AK了hhh 来的时候迟到了半小时,昨晚痛苦的补 ...

随机推荐

  1. Springboot listener

    在启动流程中,会出发许多ApplicationEvent.这时会调用对应的listener的onApplicationEvent方法.ApplicationEvent时观察者模式, (1) 实体继承A ...

  2. Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister报错解决办法

    在做Hibernate框架数据库的关联关系映射练习中出现了Could not get constructor for org.hibernate.persister.entity.SingleTabl ...

  3. 镣铐之舞:美团安全工程师Black Hat USA演讲

    背景 2018年8月9日,全球顶级安全会议——Black Hat USA在美国拉斯维加斯的曼德勒海湾会议中心落下了帷幕,这场盛会在全球黑客心中几乎等同于“世界杯”和“奥斯卡”一样的存在.这场一年一度的 ...

  4. iOS 11开发教程(四)iOS11模拟器介绍一

    iOS11模拟器介绍 在图1.6或者1.7中所看到的类似于手机的模型就是iOS模拟器.iOS模拟器是在没有iPhone或iPad设备时,对程序进行检测的设备.iOS模拟器可以模仿真实的iPhone或i ...

  5. Linux内核中断处理机制

    <什么是中断> 计算停下当前处理任务,并保存现场,转而去处理其他是任务,当完成任务后再回到原来的任务中去. <中断的分类> a:软中断     软中断时执行中断指令产生的,软中 ...

  6. 我的vim配置脚本

    自己的VIM 配置脚本,拥有自主独立知识产权(参考了一点别人的),只使用了一个插件ctags ,主要实现了一下功能: 自动补全括号,双引号,单引号,包括{},(),"" , ''只 ...

  7. luogu NOIp热身赛(2018-11-07)题解

    为什么前面的人都跑得那么快啊? QAQ T1:区间方差 题目大意:询问区间方差,支持单点修改 首先把方差的式子展开,得到 $$d = \frac{a_1 + ... a_n}{n} - \frac{a ...

  8. [BZOJ5292][BJOI2018]治疗之雨(概率DP+高斯消元)

    https://blog.csdn.net/xyz32768/article/details/83217209 不难找到DP方程与辅助DP方程,发现DP方程具有后效性,于是高斯消元即可. 但朴素消元显 ...

  9. nginx与Lua执行顺序

    Nginx顺序 Nginx 处理每一个用户请求时,都是按照若干个不同阶段(phase)依次处理的,而不是根据配置文件上的顺序. Nginx 处理请求的过程一共划分为 11 个阶段,按照执行顺序依次是 ...

  10. Codeforces Round #356 (Div. 2) D. Bear and Tower of Cubes dfs

    D. Bear and Tower of Cubes 题目连接: http://www.codeforces.com/contest/680/problem/D Description Limak i ...