【tyvj五月有奖赛 暨Loi 55 Round #1】
解题报告:
傻逼错误天天犯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】的更多相关文章
- 【TYVJ 五月图论专项有奖比赛】
最短路+TSP+最小生成树+倍增LCA+TreeDP 第一题 其实是个TSP问题(然而我没发现),但是关键点很少,只有5个,所以用dij+heap分别预处理出来这五个点为源的最短路…… 然后枚举起点 ...
- 2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛 题解&源码
Problem A: pigofzhou的巧克力棒 Description 众所周知,pigofzhou有许多妹子.有一天,pigofzhou得到了一根巧克力棒,他想把这根巧克力棒分给他的妹子们.具体 ...
- Python内置函数(55)——round
英文文档: round(number[, ndigits]) Return the floating point value number rounded to ndigits digits afte ...
- 2017年中国大学生程序设计竞赛-中南地区赛暨第八届湘潭市大学生计算机程序设计大赛题解&源码(A.高斯消元,D,模拟,E,前缀和,F,LCS,H,Prim算法,I,胡搞,J,树状数组)
A------------------------------------------------------------------------------------ 题目链接:http://20 ...
- 2019 年「计算机科学与工程学院」新生赛 暨ACM集训队选拔赛 # 1
T1 请问这还是纸牌游戏吗 https://scut.online/p/567 这道题正解据说是方根 这里先放着等以后填坑吧qwq 但是由于这道题数据是随机的 所以其实是有各种水法的(但是我比赛根本没 ...
- ypACM社团年终赛暨实验室选拔赛题解
记得补题,题目两小时半还是挺困难ak的,毕竟我验题也验了几天的时间,题目基本没有锅.题目基本属于简单题 我的三道题都是很基本的题目,希望大家补题 这些题解都是我写的,如果有疑问可以qq问我 所有的核心 ...
- DP思路
在这里记录一些在大神们的博客,以及自己做过的一些DP的神奇思路吧 1.2015/04 NEUQ 月赛 转自:http://zyfzyf.is-programmer.com/posts/89993.h ...
- 【ContestHunter】【弱省胡策】【Round4】
01分数规划(网络流)+状压DP+树形DP 官方题解地址:http://pan.baidu.com/s/1mg5S5z6 A 好神啊= =第一次写01分数规划 其实分数规划是要求$$ Maximize ...
- NOIp 0916 爆零记
题目来自神犇chad 上次爆零是说着玩,这次真的爆零了QAQ 好吧貌似是TYVJ的模拟赛打多了..一直按照TYVJ的格式提交的压缩包.. 然后莫名其妙就AK了hhh 来的时候迟到了半小时,昨晚痛苦的补 ...
随机推荐
- JSP的学习一(基础知识)
一:介绍 1). WHY: JSP 是简 Servlet 编写的一种技术, 它将 Java 代码和 HTML 语句混合在同一个文件中编写, 只对网页中的要动态产生的内容采用 Java 代码来编写,而对 ...
- Java去重字符串的两种方法以及java中冒号的使用
package com.removesamestring; import java.io.BufferedWriter; import java.util.ArrayList; import java ...
- 基于 Laravel 开发博客应用系列 —— Homestead 和 Laravel 安装器
1.Homestead 从主机操作系统的控制台中(Windows 中被称作命令提示符,Linux 中被称作终端),你可以轻松通过不带参数的homestead 命令查看所有有效的 Homestead 命 ...
- vue 单向数据流 & 双向绑定
在react中是单向数据绑定,而在vue中的特色是双向数据绑定.但是其实就我个人的理解是: 其实无论是vue还是react其实还是提倡单向数据流去管理状态,这一点在vuex和redux状态管理器上体现 ...
- 2-SAT的一些题目
http://blog.sina.com.cn/s/blog_64675f540100k2xj.html 都一个类型的不是很想写.
- 【并查集&&带权并查集】BZOJ3296&&POJ1182
bzoj1529[POI2005]ska Piggy banks [题目大意] n头奶牛m种语言,每种奶牛分别掌握一些语言.问至少再让奶牛多学多少种语言,才能使得它们能够直接或间接交流? [思路] ( ...
- 协议栈中使用crc校验函数
CRC校验介绍:循环冗余校验码,原理是多项式除法 ZigBee协议栈:能够使zigbee节点相互之间组网,数据传输,数据获取,数据显示 思路以及步骤: 1.因为IAR的程序是用c写的,所以上网查找如何 ...
- Android之基于HTTP协议的通信详解
Android系统中本身是有下载机制的,比如浏览器使用的DownloadManager.可遗憾的是,DownloadManager只提供给浏览器使用,一般的应用程序没法调用它. 另外,如果下载调用频繁 ...
- 关于clipboard插件的使用问题
概述: clipboard.js是一款轻量级的实现复制文本到剪贴板功能的JavaScript插件.通过该插件可以将输入框,文本域,DIV元素中的文本等文本内容复制到剪贴板中 clipboard.js ...
- C# 高级编程9 第30章MEF C#可扩展编程之MEF第2章(抄录)
Managed Extensibility Framework (MEF) 什么是 MEF? Managed Extensibility Framework 即 MEF 是用于创建轻量.可扩展应用 ...