[JSC2021 A~D + F]
半小时打完了\(A~D\),想要一发\(F\)冲进前\(100\),结果平衡树常数大\(T\)了。据说\(G\)是矩阵树定。
\(A\)
放代码吧。
A
// code by Dix_
#include<bits/stdc++.h>
#define ll long long
inline ll read(){
char C=getchar();
ll N=0 , F=1;
while(('0' > C || C > '9') && (C != '-')) C=getchar();
if(C == '-') F=-1 , C=getchar();
while('0' <= C && C <= '9') N=(N << 1)+(N << 3)+(C - 48) , C=getchar();
return F*N;
}
ll x,y,z;
int main(){
x = read(),y = read(),z = read();
if(y * z % x != 0)
std::cout<<(ll)y * z / x;
else
std::cout<<(ll)y * z / x - 1<<std::endl;
}
\(B\)
按题意模拟
B
// code by Dix_
#include<bits/stdc++.h>
#define ll long long
#define M 1000000
inline ll read(){
char C=getchar();
ll N=0 , F=1;
while(('0' > C || C > '9') && (C != '-')) C=getchar();
if(C == '-') F=-1 , C=getchar();
while('0' <= C && C <= '9') N=(N << 1)+(N << 3)+(C - 48) , C=getchar();
return F*N;
}
ll num[M];
ll n,m;
int main(){
n = read(),m = read();
for(int i = 1;i <= n;++i){
ll x = read();
if(num[x] == 0)
num[x] ++ ;
}
for(int i = 1;i <= m;++i){
ll x = read();
num[x] ++ ;
}
for(int i = 1;i <= M;++i)
if(num[i] == 1)
std::cout<<i<<" ";
}
\(C\)
考虑枚举这个最大的公约数,把这个公约数的倍数在小于\(m\)情况下求出第二大的,看是否大于\(n\)
C
// code by Dix_
#include<bits/stdc++.h>
#define ll long long
#define M 1000000
inline ll read(){
char C=getchar();
ll N=0 , F=1;
while(('0' > C || C > '9') && (C != '-')) C=getchar();
if(C == '-') F=-1 , C=getchar();
while('0' <= C && C <= '9') N=(N << 1)+(N << 3)+(C - 48) , C=getchar();
return F*N;
}
ll num[M];
ll n,m;
bool s(int a){
for(int i = 2;i < sqrt(a);++i)
if(a % i == 0)
return false;
return true;
}
int main(){
n = read(),m = read();
for(int i = m;i >= 1;--i){
ll x = m / i * i - i;
ll y = m / i * i;
if(x >= n){
std::cout<<i;
return 0;
}
}
}
\(D\)
考虑第一位有\(p - 1\)种选择,以后每个位根据前面的和的膜,只有\(p-2\)种
D
// code by Dix_
#include<bits/stdc++.h>
#define ll long long
#define mod 1000000007
inline ll read(){
char C=getchar();
ll N=0 , F=1;
while(('0' > C || C > '9') && (C != '-')) C=getchar();
if(C == '-') F=-1 , C=getchar();
while('0' <= C && C <= '9') N=(N << 1)+(N << 3)+(C - 48) , C=getchar();
return F*N;
}
ll n,p;
ll power(ll a,ll b){
ll ans = 1;
while(b){
if(b & 1)ans = ans * a % mod;
a = a * a % mod;
b >>= 1;
}
return ans;
}
int main(){
n = read();
p = read();
p -= 1;
std::cout<<(p * power(p - 1,n - 1)) % mod<<std::endl;
}
\(F\)
考虑改变一个数时,在另外一个序列里找到原数的贡献,和现在这个数的贡献。
并在这个序列中删掉原数,加入新数。
用平衡树操作,只要查询前缀,前缀和,还有删除插入操作
放一下考场代码,被卡常了,找时间再改吧。
F
// code by Dix_
#include<bits/stdc++.h>
#define ll long long
#define M 200005
inline ll read(){
char C=getchar();
ll N=0 , F=1;
while(('0' > C || C > '9') && (C != '-')) C=getchar();
if(C == '-') F=-1 , C=getchar();
while('0' <= C && C <= '9') N=(N << 1)+(N << 3)+(C - 48) , C=getchar();
return F*N;
}
ll n,m,q;
ll a[M],b[M],suma,sumb;
ll ans = 0;
struct P{
#define A 2000010
ll ch[A][2],val[A],cv[A],siz[A],cnt,sum[A];
#define l(x) ch[x][0]
#define r(x) ch[x][1]
#define v(x) val[x]
#define c(x) cv[x]
#define s(x) siz[x]
#define sa(x) sum[x]
void up(ll x){s(x) = 1 + s(l(x)) + s(r(x)),sa(x) = v(x) + sa(l(x)) + sa(r(x));}
ll randoom(){return rand() << 15 | rand();}
ll newcode(ll x){s(++cnt) = 1,sa(cnt) = v(cnt) = x,c(cnt) = randoom();return cnt;}
void split(ll now,ll k,ll &x,ll &y){
if(!now){x = y = 0;return;}
if(v(now) <= k) x = now,split(r(now),k,r(now),y);
else
y = now,split(l(now),k,x,l(now));
up(now);
}
ll merge(ll x,ll y){
if(!x || !y)return x + y;
if(c(x) < c(y)){
r(x) = merge(r(x),y);
up(x);return x;
}
else{
l(y) = merge(x,l(y));
up(y);return y;
}
}
ll root,x,y,z,cn;
void insert(ll a){
cn ++ ;
split(root,a,x,y);
root = merge(merge(x,newcode(a)),y);
}
void del(ll a){
cn -- ;
split(root,a,x,z);
split(x,a - 1,x,y);
y = merge(l(y),r(y));
root = merge(x,merge(y,z));
}
ll find(ll a){
split(root,a - 1,x,y);
ll ans = s(x) + 1;
root = merge(x,y);
return ans;
}
ll kth(ll now,ll k){
if(k <= s(l(now)))return kth(l(now),k);
else
if(k == s(l(now)) + 1)return now;
else
return kth(r(now),k - s(l(now)) - 1);
}
ll pre(ll a){
split(root,a,x,y);
ll ans = s(x);
merge(x,y);
return ans;
}
ll nex(ll a){
split(root,a,x,y);
ll ans = v(kth(y,1));
merge(x,y);
return ans;
}
ll prev(ll a){
split(root,a,x,y);
ll ans = sa(kth(x,s(x)));
merge(x,y);
return ans;
}
}Q,P;//A B
ll tob(int x){
ll l = sumb - P.prev(x);
// std::cout<<l<<std::endl;
ll k = P.pre(x) * x;
// std::cout<<k<<std::endl;
return l + k;
}//在b里找贡献。
ll toa(int x){
ll l = suma - Q.prev(x);
ll k = Q.pre(x) * x;
return l + k;
}//在b里找贡献。
int main(){
n = read(),m = read(),q = read();
for(int i = 1;i <= n;++i)
Q.insert(0);
for(int i = 1;i <= m;++i)
P.insert(0);
while(q -- ){
ll t = read(),x = read(),y = read();
if(t == 1){
ans += tob(y) - tob(a[x]);
suma += y - a[x];
Q.del(a[x]),Q.insert(y);
a[x] = y;
}
if(t == 2){
ans += toa(y) - toa(b[x]);
sumb += y - b[x];
P.del(b[x]),P.insert(y);
b[x] = y;
}
std::cout<<ans<<std::endl;
}
}
\(rank 800\)果真还是逊啊。
[JSC2021 A~D + F]的更多相关文章
- Mysql_以案例为基准之查询
查询数据操作
- 在 C# 里使用 F# 的 option 变量
在使用 C# 与 F# 混合编程的时候(通常是使用 C# 实现 GUI,F#负责数据处理),经常会遇到要判断一个 option 是 None 还是 Some.虽然 Option module 里有 i ...
- 如果你也会C#,那不妨了解下F#(7):面向对象编程之继承、接口和泛型
前言 面向对象三大基本特性:封装.继承.多态.上一篇中介绍了类的定义,下面就了解下F#中继承和多态的使用吧.
- 如果你也会C#,那不妨了解下F#(2):数值运算和流程控制语法
本文链接:http://www.cnblogs.com/hjklin/p/fs-for-cs-dev-2.html 一些废话 一门语言火不火,与语言本身并没太大关系,主要看语言的推广. 推广得好,用的 ...
- 使用F#开发ASP.NET Core应用程序
.NET Core 里的F# 在.NET Core刚发布时,就已经添加了对F#的支持.但因为当时F#组件还不完整,而一些依赖包并没有放在Nuget上,而是社区自己放到MyGet上,所以在使用dotne ...
- 如果你也会C#,那不妨了解下F#(6):面向对象编程之“类”
前言 面向对象的思想已经非常成熟,而使用C#的程序员对面向对象也是非常熟悉,所以我就不对面向对象进行介绍了,在这篇文章中将只会介绍面向对象在F#中的使用. F#是支持面向对象的函数式编程语言,所以你用 ...
- 如果你也会C#,那不妨了解下F#(5):模块、与C#互相调用
F# 项目 在之前的几篇文章介绍的代码都在交互窗口(fsi.exe)里运行,但平常开发的软件程序可能含有大类类型和函数定义,代码不可能都在一个文件里.下面我们来看VS里提供的F#项目模板. F#项目模 ...
- 如果你也会C#,那不妨了解下F#(4):了解函数及常用函数
函数式编程其实就是按照数学上的函数运算思想来实现计算机上的运算.虽然我们不需要深入了解数学函数的知识,但应该清楚函数式编程的基础是来自于数学. 例如数学函数\(f(x) = x^2+x\),并没有指定 ...
- 如果你也会C#,那不妨了解下F#(3):F#集合类型和其他核心类型
本文链接:http://www.cnblogs.com/hjklin/p/fs-for-cs-dev-3.html 在第一篇中,我们介绍了一些基础数据类型,其实那篇标题中不应该含有"F#&q ...
随机推荐
- NX开发库版本问题
有做NX二次开发的朋友经常问我这样的问题:我在NX8.0上开发的程序,可以在NX9.0上运行吗? 由于NX的开发库随着版本的更新也会不断更新,会增加新的方法,同时有些也会过时或者消失. 如下图:NX8 ...
- 【二食堂】Beta - Scrum Meeting 1
Scrum Meeting 1 例会时间:5.13 18:30~18:50 进度情况 组员 当前进度 今日任务 李健 1. 查阅资料,解决划词勾选和右键菜单的问题issue2. 修复了Alpha阶段的 ...
- OO第三单元JML总结
目录 目录一.JML语言的理论基础二.应用工具链三.部署SMT Solver四.部署JMLUnitNG/JMLUnit五.三次作业分析第一次作业第二次作业第三次作业六.总结与心得体会 一.JML语言的 ...
- OO前三次作业思考(第一次OO——Blog)
OO前三次作业总结 基于度量分析程序结构 由于三次作业较多,决定分析内容.功能最为复杂的第三次作业. 上图为第三次作业的类图.我使用了一个抽象类Factor,写了五个因子继承Factor,然后又单独开 ...
- NKOJ-4573 Falsita
问题描述: 到海边了呢...... 如果没有那次选择,现在是不是会好些呢...... 都过去了. 仰望着星空,迎面吹过一阵阵海风,倚靠着护栏,Fine 在海边静静地伫立着,在一个个无际的长夜后,Fin ...
- Allegro如何测量距离,测距工具的使用
http://www.allegro-skill.com/thread-2480-1-1.html
- Linux入门所必备的Linux命令和C语言基础
文件和目录(底部有视频资料) cd /home 进入 '/ home' 目录' cd - 返回上一级目录 cd -/- 返回上两级目录 cd 进入个人的主目录 cd ~user1 进入个人的主目录 c ...
- Java并发:ReadWriteLock 读写锁
读写锁在同一时刻可以允许多个线程访问,但是在写线程访问,所有的读线程和其他写线程均被阻塞. 读写锁不像 ReentrantLock 那些排它锁只允许在同一时刻只允许一个线程进行访问,读写锁可以允许多个 ...
- git安装心得
每天码代码打卡任务,老师需要我们提交链接,这就需要我们把自己打的代码文件上传到GitHub上来,以此获得链接. 自己是一个新人,安装git也是什么都不懂(跟着网上的教程也总是能出错) 安装正常操作:h ...
- robot_framewok自动化测试--(2)创建第一个项目
创建第一个robot_framewok项目 通过 RIDE 去学习和使用 Robot Framework 框架,对于初学者来说大大的降低了学习难度.所以后面对 Robot Framework 框架都将 ...