解题报告:


  傻逼错误天天犯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. Mongoose关于当天日期的查询

    参考:https://blog.csdn.net/difffate/article/details/70312894 Ant Design Pro中,有关于日期的查询条件,但日期是以数字表示的 Req ...

  2. CSUOJ 1973 给自己出题的小X DFS

    Description 小X学习了dfs,为了练习搜索,开始给自己出题玩. 玩着玩着,一会把自己难住了,一会又被自己难倒了,真是有趣诶! 小X出的题: 现在有N个不同的正整数,求它们可以组成多少个这样 ...

  3. poj-1151矩形面积并-线段树

    title: poj-1151矩形面积并-线段树 date: 2018-10-30 22:35:11 tags: acm 刷题 categoties: ACM-线段树 概述 线段树问题里的另一个问题, ...

  4. JAVAEE——宜立方商城05:前台系统搭建、首页展示、Cms系统的实现

    1. 学习计划 1.前台系统搭建 2.商城首页展示 3.Cms系统的实现 a) 内容分类管理 b) 内容管理 4.前台内容动态展示 2. 商城首页展示 系统架构: 页面位置: 2.1. 工程搭建 可以 ...

  5. UDP转TCP隧道工具udptunnel

    UDP转TCP隧道工具udptunnel   在部分受限的网络环境中,UDP协议被受限,但TCP不受限制.Kali Linux提供一个UDP转TCP隧道工具udptunnel.该工具可以分别启动服务器 ...

  6. 【数论】Codeforces Round #483 (Div. 2) [Thanks, Botan Investments and Victor Shaburov!] C. Finite or not?

    题意:给你一个分数,问你在b进制下能否化成有限小数. 条件:p/q假如已是既约分数,那么如果q的质因数分解集合是b的子集,就可以化成有限小数,否则不能. 参见代码:反复从q中除去b和q的公因子部分,并 ...

  7. [COGS2639]偏序++

    [COGS2639]偏序++ 题目大意: \(n(n\le40000)\)个\(k(k\le7)\)元组,求\(k\)维偏序. 思路: 分块后用bitset维护. 时间复杂度\(\mathcal O( ...

  8. pygame系列_第一个程序_图片代替鼠标移动

    想想现在学校pygame有几个钟了,就写了一个小程序:图片代替鼠标移动 程序的运行效果: 当鼠标移动到窗口内,鼠标不见了,取而代之的是图片..... ========================= ...

  9. VC++ 设置控件显示文本的前景色、背景色以及字体

    在每个控件开始绘制之前,都会向其父窗口发送WM_CTLCOLOR通告消息,在该消息的处理函数中,可以设置控件显示文本的前景色.背景色以及字体.该消息处理函数还要求返回一个画刷的句柄,用于在控件具体的绘 ...

  10. Oracle sql语句中(+)作用

    select * from operator_info o, group_info g  where o.group_id = g.group_id(+); 理解:    + 表示补充,即哪个表有加号 ...