csps-s模拟测试60嘟嘟噜,天才绅士少女助手克里斯蒂娜,凤凰院凶真题解
题面:https://www.cnblogs.com/Juve/articles/11625190.html
嘟嘟噜:
约瑟夫问题
第一种递归的容易re,但复杂度较有保证
第二种适用与n大于m的情况
第三种O(n)用于n不太大或m大于n时
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define int long long
#define re register
using namespace std;
int t,n,m;
int calc(int n,int m){
if(n==1) return 0;
if(n<m) return (calc(n-1,m)+m)%n;
int s=calc(n-n/m,m)-n%m;
return s<0?s+n:s+s/(m-1);
}
signed main(){
scanf("%lld",&t);
while(t--){
scanf("%lld%lld",&n,&m);
cout<<calc(n,m)+1<<endl;
re int ans=0;
int i=2;
while(i<=n){
int tim=(i-ans-1)/m+1;
if(i-1+tim>=n) tim=n-(i-1);
i+=tim,ans=(ans+tim*m)%(i-1);
}
cout<<ans+1<<endl;
ans=0;
for(re int i=2;i<=n;++i){
ans=(ans+m)%i;
}
printf("%lld\n",ans+1);
}
return 0;
}
天才绅士少女助手克里斯蒂娜:
就是推式子:
$\sum\limits_{i=l}^{r}\sum\limits_{j=i+1}^{r}|v_i*v_j|^2=\sum\limits_{i=l}^{r}\sum\limits_{j=i+1}^{r}(x_i^2*y_j^2+y_i^2*x_j^2-2*x_i*y_i*x_j*y_j)$
我们把所有$x_i^2$和$y_i^2$和$x_i*y_i$提出来,就有了
$ans=\sum\limits_{i=l}^{r}(x_i^2*\sum\limits_{j=i+1}^{r}y_j^2+y_i^2*\sum\limits_{j=i+1}^{r}x_j^2+x_i*y_i*\sum\limits_{j=i+1}^{r}x_j*y_j)$
然后这个式子可以树状数组维护后面的sigma
但是复杂度还是不优
我们可以把i和j看成无序的,最后再除以2
所以就有了:
$\sum\limits_{i=1}^{n}\sum\limits_{j=i+1}^{n}|v_i*v_j|^2=\sum\limits_{j=1}^{n}(x_j^2)*\sum\limits_{j=1}^{n}(y_j^2)-\sum\limits_{j=1}^{n}(x_j*y_j)^2$
然后就可以愉快地树状数组了
#include<iostream>
#include<cstdio>
#include<iostream>
#include<algorithm>
#define int long long
#define re register
using namespace std;
const int MAXN=1e6+5;
const int mod=20170927;
int n,m;
int read(){
int x=0;char ch=getchar();
while(ch<'0'||ch>'9') ch=getchar();
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
return x;
}
struct node{
int x,y,s1,s2,s3;
inline friend int operator * (node p,node q){
return ((p.x*q.y%mod-q.x*p.y%mod)%mod+mod)%mod;
}
}a[MAXN];
inline int lowbit(re int x){
return x&(-x);
}
struct BIT{
int c[MAXN];
inline void update(re int pos,re int val){
for(re int i=pos;i<=n;i+=lowbit(i)){
(c[i]+=val)%=mod;
}
}
inline int query(re int pos){
re int res=0;
for(re int i=pos;i>0;i-=lowbit(i)){
(res+=c[i])%=mod;
}
return res;
}
inline int ask(re int l,re int r){
return ((query(r)-query(l-1))%mod+mod)%mod;
}
}tr[3];
signed main(){
n=read(),m=read();
for(re int i=1;i<=n;++i){
a[i].x=read(),a[i].y=read();
a[i].s1=a[i].x*a[i].x%mod,a[i].s2=a[i].y*a[i].y%mod,a[i].s3=a[i].x*a[i].y%mod;
tr[0].update(i,a[i].s1),tr[1].update(i,a[i].s2),tr[2].update(i,a[i].s3);
}
while(m--){
re int opt=read();
if(opt==1){
re int p=read(),x=read(),y=read();
tr[0].update(p,x*x%mod-a[p].s1);
tr[1].update(p,y*y%mod-a[p].s2);
tr[2].update(p,x*y%mod-a[p].s3);
a[p]=(node){x%mod,y%mod,x*x%mod,y*y%mod,x*y%mod};
}else{
re int l=read(),r=read(),ans=0;
ans=((tr[0].ask(l,r)*tr[1].ask(l,r)%mod-tr[2].ask(l,r)*tr[2].ask(l,r)%mod)%mod+mod)%mod;
printf("%lld\n",ans);
}
}
return 0;
}
凤凰院凶真:
求两个数列的最长公共上升子序列并输出路径
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stack>
#define int long long
using namespace std;
const int MAXN=5005;
int n,a[MAXN],m,b[MAXN],f[MAXN][MAXN],pre[MAXN][MAXN],pos=1;
stack<int>sta;
signed main(){
scanf("%lld",&n);
for(int i=1;i<=n;++i) scanf("%lld",&a[i]);
scanf("%lld",&m);
for(int i=1;i<=m;++i) scanf("%lld",&b[i]);
memset(pre,-1,sizeof(pre));
for(int i=1;i<=n;++i){
int v=0,k=0;
for(int j=1;j<=m;++j){
f[i][j]=f[i-1][j];
if(b[j]<a[i]&&v<f[i-1][j]) v=f[i-1][j],k=j;
if(a[i]==b[j]) f[i][j]=v+1,pre[i][j]=k;
}
}
for(int i=1;i<=n;++i){
if(f[n][pos]<f[n][i]) pos=i;
}
printf("%lld\n",f[n][pos]);
if(f[n][pos]!=0){
for(int i=n;i>=1;--i){
if(pre[i][pos]!=-1)
sta.push(a[i]),pos=pre[i][pos];
}
while(!sta.empty()){
printf("%lld ",sta.top());
sta.pop();
}
puts("");
}
return 0;
}
csps-s模拟测试60嘟嘟噜,天才绅士少女助手克里斯蒂娜,凤凰院凶真题解的更多相关文章
- [CSP-S模拟测试]:天才绅士少女助手克里斯蒂娜(数学+树状数组)
题目描述 红莉栖想要弄清楚楼下天王寺大叔的显像管电视对“电话微波炉(暂定)”的影响. 选取显像管的任意一个平面,一开始平面内有个$n$电子,初始速度分别为$v_i$,定义飘升系数为$$\sum \li ...
- 【CSP模拟赛】天才绅士少女助手克里斯蒂娜(线段树&读入优化&输出优化)
题面描述 红莉栖想要弄清楚楼下天王寺大叔的显像管电视对“电话微波炉(暂定)”的影响.选取显像管的任意一个平面,一开始平面内有个n电子,初始速度分别为vi,定义飘升系数为 $$\sum_{1\leqsl ...
- [CSP-S模拟测试]:凤凰院凶真(LCIS)
题目描述 $\alpha$世界线.凤凰院凶真创立了反抗$SERN$统治的组织“瓦尔基里”.为了脱离$\alpha$线,他需要制作一个世界线变动率测量仪.测量一个世界线相对于另一个世界线的变动率,实质上 ...
- 【CSP模拟赛】凤凰院凶真(最长公共上升子序列)
题目描述 α世界线.凤凰院凶真创立了反抗SERN统治的组织“瓦尔基里”.为了脱离α线,他需要制作一个世界线变动率测量仪. 测量一个世界线相对于另一个世界线的变动率,实质上就是要求出这两个世界线的最长公 ...
- csp-s模拟测试60
csp-s模拟测试60 2019-10-05 RT. 又颓又垃圾. 状态低迷,题都交不上去. 交了也是爆零,垃圾玩家没有什么可说的,就是垃圾. A. 嘟嘟噜 $mlogn$的毒瘤做法. 贴 ...
- [CSP-S模拟测试60]题解
回去要补一下命运石之门了…… A.嘟嘟噜 给定报数次数的约瑟夫,递推式为$ans=(ans+m)\% i$. 考虑优化,中间很多次$+m$后是不用取模的,这种情况就可以把加法变乘法了.问题在于如何找到 ...
- [考试反思]1005csp-s模拟测试60:招魂
最近总是好一场烂一场的.没有连续两场排名波动小于20的... 没人管.反正大脸一点脸没有就又AK了. 但是T3爆零这种事情吧... 爆搜不是很难打,但是想优化想了半天剩的时间不够结果赶忙打出来了,然后 ...
- csp-s模拟测试99
csp-s模拟测试99 九九归一直接爆炸. $T1$一眼板子. $T2$一眼语文题(语文的唯一一次$120+$是给模拟出来的可知我的语文能力). $T3$一眼普及题. ?? Hours Later 板 ...
- csp-s模拟测试92
csp-s模拟测试92 关于$T1$:最短路这一定建边最短路. 关于$T2$:傻逼$Dp$这一定线段树优化$Dp$. 关于$T3$:最小生成树+树P+换跟一定是这样. 深入(?)思考$T1$:我是傻逼 ...
随机推荐
- class1and2_tkinter之 Label & Button 标签和按钮
''' # ------------------------------------------------------------ # # 1. 使用tkinter设置一个标签 # # # 设计tk ...
- SparkSession、SparkContext、SQLContext和HiveContext之间的区别。
SparkContext 是什么? 驱动程序使用SparkContext与集群进行连接和通信,它可以帮助执行Spark任务,并与资源管理器(如YARN 或Mesos)进行协调. 使用SparkCont ...
- CodeForces 1152F2 Neko Rules the Catniverse (Large Version)
题目链接:http://codeforces.com/problemset/problem/1152/F2 题目大意 见http://codeforces.com/problemset/problem ...
- 牛客练习赛43B Tachibana Kanade Loves Probability
题目链接:https://ac.nowcoder.com/acm/contest/548/C 题目大意 略 分析 利用快速幂先移到 k1 位,然后开始一个一个取余数. 代码如下 #include &l ...
- 『BASH』——Hadex's brief analysis of "Lookahead and Lookbehind Zero-Length Assertions"
/*为节省时间,本文以汉文撰写*/ -前言- 深入学习正则表达式,可以很好的提高思维逻辑的缜密性:又因正则应用于几乎所有高级编程语言,其重要性不言而喻,是江湖人士必备的内功心法. 正则表达式概要(ob ...
- 996弱爆了,我还能12x12, 8116+8!
Java技术栈 www.javastack.cn 优秀的Java技术公众号 来自长江日报 这些天"马云谈996"的话题火了 昨晚刘强东也在朋友圈发文 "8116+8!&q ...
- Spring Boot Server容器配置
参数配置容器 server.xx开头的是所有servlet容器通用的配置,server.tomcat.xx开头的是tomcat特有的参数,其它类似. 所有参数绑定配置类:org.springframe ...
- Python3 多进程编程 - 学习笔记
Python3 多进程编程(Multiprocess programming) 为什么使用多进程 具体用法 Python多线程的通信 进程对列Queue 生产者消费者问题 JoinableQueue ...
- C++之变量
变量 **作用**:给一段指定的内存空间起名,方便操作这段内存 **语法**:数据类型 变量名 = 初始值; 语法:数据类型 变量名 = 初始值; 记得加英文分号结束语句 > 注意:C++ ...
- POJ1149_PIGS(网络流/EK)
PIGS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 15721 Accepted: 7021 Description ...