【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]转移过来,其实是可以滚动数组优化空间的,不过懒得弄了=。=反正能过

 1 //TYVJ A
 2 #include<vector>
 3 #include<cstdio>
 4 #include<cstdlib>
 5 #include<cstring>
 6 #include<iostream>
 7 #include<algorithm>
 8 #define rep(i,n) for(int i=0;i<n;++i)
 9 #define F(i,j,n) for(int i=j;i<=n;++i)
10 #define D(i,j,n) for(int i=j;i>=n;--i)
11 using namespace std;
12
13 int getint(){
14     int v=0,sign=1; char ch=getchar();
15     while(ch<‘0‘||ch>‘9‘) {if (ch==‘-‘) sign=-1; ch=getchar();}
16     while(ch>=‘0‘&&ch<=‘9‘) {v=v*10+ch-‘0‘; ch=getchar();}
17     return v*sign;
18 }
19 typedef long long LL;
20 const int N=500010,INF=~0u>>2;
21 /*******************template********************/
22 int n,a[N],c[N],f[N][6];
23 int main(){
24 #ifndef ONLINE_JUDGE
25     freopen("input.txt","r",stdin);
26 //    freopen("output.txt","w",stdout);
27 #endif
28     n=getint();
29     char s[3];
30     F(i,1,n){
31         scanf("%s",s);
32         a[i]=s[0]-‘A‘+1;
33         c[i]=getint();
34     }
35     F(i,1,n) F(j,1,4){
36         f[i][j]=max(f[i-1][j-1],max(f[i-1][j],f[i-1][j+1]))+
37             (j==a[i]?c[i]:0);
38     }
39     int ans=0;
40     F(j,1,4) ans=max(f[n][j],ans);
41     printf("%d\n",ans);
42     return 0;
43 }

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

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

  第三题:询问到树上两点距离$\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,一句话爆零系列。

 1 //TYVJ E
 2 #include<vector>
 3 #include<cstdio>
 4 #include<cstdlib>
 5 #include<cstring>
 6 #include<iostream>
 7 #include<algorithm>
 8 #define rep(i,n) for(int i=0;i<n;++i)
 9 #define F(i,j,n) for(int i=j;i<=n;++i)
10 #define D(i,j,n) for(int i=j;i>=n;--i)
11 using namespace std;
12 typedef long long LL;
13 LL getLL(){
14     LL v=0,sign=1; char ch=getchar();
15     while(ch<‘0‘||ch>‘9‘) {if (ch==‘-‘) sign=-1; ch=getchar();}
16     while(ch>=‘0‘&&ch<=‘9‘) {v=v*10+ch-‘0‘; ch=getchar();}
17     return v*sign;
18 }
19
20 const int N=100010,INF=~0u>>2;
21 /*******************template********************/
22
23 LL mx[N<<2],sum[N<<2],a[N],n,m;
24 #define L (o<<1)
25 #define R (o<<1|1)
26 #define mid (l+r>>1)
27 void maintain(int o,int l,int r){
28     if (l==r) return;
29     mx[o]=max(mx[L],mx[R]);
30     sum[o]=sum[L]+sum[R];
31 }
32 void build(int o,int l,int r){
33     if (l==r) {
34         sum[o]=mx[o]=a[l];
35     }else{
36         build(L,l,mid);
37         build(R,mid+1,r);
38         maintain(o,l,r);
39     }
40 }
41 void update(int o,int l,int r,int pos,LL v){
42     if (l==r) a[l]=mx[o]=sum[o]=v;
43     else{
44         if (pos<=mid) update(L,l,mid,pos,v);
45         else update(R,mid+1,r,pos,v);
46         maintain(o,l,r);
47     }
48 }
49 int ql,qr;
50 void modify(int o,int l,int r,LL x){
51     if (ql>r || qr<l) return;
52     if (mx[o]<x) return;
53     if (l==r) a[l]=mx[o]=sum[o]=a[l]%x;
54     else{
55         modify(L,l,mid,x);
56         modify(R,mid+1,r,x);
57         maintain(o,l,r);
58     }
59 }
60 LL ans;
61 void query(int o,int l,int r){
62     if (ql<=l && qr>=r) ans+=sum[o];
63     else{
64         if (ql<=mid) query(L,l,mid);
65         if (qr>mid) query(R,mid+1,r);
66     }
67 }
68 int main(){
69 #ifndef ONLINE_JUDGE
70     freopen("E.in","r",stdin);
71 //    freopen("output.txt","w",stdout);
72 #endif
73     n=getLL(); m=getLL();
74     F(i,1,n) a[i]=getLL();
75     build(1,1,n);
76     LL cmd,l,k,x;
77     F(i,1,m){
78         cmd=getLL(); l=getLL(); k=getLL();
79         if (cmd==1){
80             ql=l; qr=k; ans=0;
81             query(1,1,n);
82             printf("%I64d\n",ans);
83         }else if (cmd==2){
84             x=getLL();
85             ql=l; qr=k;
86             modify(1,1,n,x);
87         }else{
88             update(1,1,n,l,k);
89         }
90     }
91     return 0;
92 }

时间: 2024-12-22 22:37:05

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

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

Problem A: pigofzhou的巧克力棒 Description 众所周知,pigofzhou有许多妹子.有一天,pigofzhou得到了一根巧克力棒,他想把这根巧克力棒分给他的妹子们.具体地,这根巧克力棒长为 n,他想将这根巧克力棒折成 n 段长为 1 的巧克力棒,然后分给妹子们. 但是他妹子之一中的 15zhazhahe 有强迫症.若它每次将一根长为 k 的巧克力棒折成两段长为 a 和 b 的巧克力棒,此时若 a=b,则15zhazhahe会得到一点高兴值. pigofzhou想知

Python内置函数(55)——round

英文文档: round(number[, ndigits]) Return the floating point value number rounded to ndigits digits after the decimal point. If ndigits is omitted, it returns the nearest integer to its input. Delegates to number.__round__(ndigits). For the built-in type

浙江理工大学2016年新生赛 暨全国新生邀请赛

Problem A: Save the Princess Time Limit: 1 Sec  Memory Limit: 128 MB Description Once upon time there was a cute princess called JWliving in a castle. One day, the princess had been kidnapped by the robbers. The prince called BHbecame worried, he wan

2017年中国大学生程序设计竞赛-中南地区赛暨第八届湘潭市大学生计算机程序设计大赛游记心得

第一天---------------------------------------------------------------------------------------------------------------------- 一大早六点钟起床开始整理东西,准备出发了(昨晚打CF打到2点,困的要命,要不是要去比赛,我才懒得起这么早呢),该死的碰到了大雨,于是等啊等,等到了七点一十才出门,那时候雨才刚停,我和室友到食堂迅速地吃完早餐以后,在食堂碰到了我的队友yzx,然后跟着他一起到

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

T1 请问这还是纸牌游戏吗 https://scut.online/p/567 这道题正解据说是方根 这里先放着等以后填坑吧qwq 但是由于这道题数据是随机的 所以其实是有各种水法的(但是我比赛根本没有想到任何水法qwq 第一种水法呢 因为数据随机 所以当数据大小变得比较大的时候 基本乘出来的数已经能覆盖1到P-1了 所以我们直接输出1和P-1就可以了 而数据比较小的时候就可以暴力计算了qwq include<cstdio> #include<cstring> #include&l

SSL新年欢乐赛暨BPM退役赛

目录 前言 C 大水题 题目 分析 代码 D 简单数据结构题 题目 分析 代码 G 简单01背包题 题目 分析 (解题报告) 前言 A,B水题,E,I原题 实际赛时400分(乐多毁我青春) C 大水题 题目 如果有一个长度为\(n\)的数组\(a[1],a[2],\cdots,a[n]\),对于非负整数\(k\),若令\(b[i]=a[i] \oplus k\),满足bb是一个单调不下降的数组,即满足\(b[1]\le b[2]\le \cdots \le b[n]\),则称\(k\)是数组\(

大二下学期——期末总结

时至今晚,就意味着大二整年就满满当当.尽心尽力地过去了.前两天开始思考一个问题:这学期的我干了什么?收获了什么?放弃了什么? 凭借着一点点向前回忆,想到了一个悲催的事实,好像这学期都没有给自己放过一整天假,成天感觉自己早出晚归,和老朋友的联系也少了许多.按着月份去总结,2018年3月份开学以来,成绩竟排在系第一.看到成绩那一刻满心愧疚,毕竟上学期自己是靠着抱润哥.爽哥两个大腿在软工概论取得好分数,数据结构.离散数学更是爽哥一手补的等等.再一看,自己分心了团委的工作,似乎给朋朋哥请了一个不知哪是尽

python基础之函数

python 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创建函数,这被叫做用户自定义函数. 定义一个函数 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 函数式编程和面向过程编程的区别: 函数式:将某功能代码封装到函数中,日后便无需重复编

ACM退役记&amp;&amp;回忆录

ACM退役记 2017.9.19星期二,"九一八事变"八十六年后的第二天,永远记住这个日子,刚好是我报名ACM到现在,刚好满一年,而今天正是我注册杭州电子科技大学OJ的时间(就是这一天报名的),附上小图一张! 嗯,我退役了,真的退役了,从此告别了ACM的生涯,虽然有很多遗憾,虽然有很多不舍,虽然有很多很多不情愿,但是,,,还是没能阻止这一天的到来,可能你们会认为我退役的有点早,可能你们也会有很多疑惑,为啥这么优秀这么强的大佬竟然退役的这么早...(自嘲一下,其实菜的一逼) 其实这个原因