2019.10.29 csp-s模拟测试92 反思总结
今天快乐的墨雨笙因为什么而几乎爆零了呢?
顾此失彼+不会对拍+无脑的复杂度
今天高兴的墨雨笙又因为什么调了一个下午呢?
不明题意+不想范围+板子低级错误
R.I.P.
T1:
//唉
//害怕TLE,所以没有用while
//害怕不正确,所以两种情况又算了两次
//细节全都考虑不清,何苦呢我……?
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const long long inf=1e15;
long long sum,ans,n,a,b,x,y,xx,yy,x2,y2,flag;
long long exgcd(long long a,long long b,long long &x,long long &y){
if(!b){
x=,y=;
return a;
}
long long q=exgcd(b,a%b,x,y);
long long z=x;
x=y,y=z-(a/b)*y;
return q;
}
int main()
{
// freopen("1.in","r",stdin);
scanf("%lld%lld%lld",&n,&a,&b);
long long gcd=exgcd(a,b,x2,y2);
if(b/gcd<a/gcd)swap(a,b),swap(x2,y2);//!
for(int i=;i<=n;i++){
long long val;
scanf("%lld",&val);
if(flag)continue;
if(val<)val=-val;//不,这个不用考虑也可以
ans=inf;
if(val%a==)ans=min(ans,val/a);
if(val%b==)ans=min(ans,val/b);
x=x2,y=y2;
if(val%gcd==){
x*=val/gcd,y*=val/gcd;
long long b0=b/gcd,a0=a/gcd;
xx=(x%b0+b0)%b0;//!
yy=(val-xx*a)/b;
while(abs(xx-b0)+abs(yy+a0)<abs(xx)+abs(yy))xx-=b0,yy+=a0;//!
while(abs(xx+b0)+abs(yy-a0)<abs(xx)+abs(yy))xx+=b0,yy-=a0;
ans=min(ans,(long long)abs(xx)+(long long)abs(yy));
//实际上只有四个地方的点有可能产生贡献:
//x为最小正整数解、x为最小负整数解、y为最小正整数解、y为最小负整数解
//否则一定可以继续缩小
}
if(ans==inf){
flag=;
}
else sum+=ans;
}
if(flag)printf("-1");
else printf("%lld\n",sum);
return ;
}
T2:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=3e5+;
int n,c[*N],cnt,T[N*],L[N*],R[N*],tot,lst;
long long f[N],val,maxx[N],sum[N*],ans;
struct node{
int a,b,w;
}s[N];
bool cmp(node x,node y){
return x.a==y.a?x.b<y.b:x.a<y.a;
}
void build(int &p,int l,int r){
p=++tot;
if(l==r)return;
int mid=(l+r)/;
build(L[p],l,mid);
build(R[p],mid+,r);
}
long long query(int p0,int p,int l,int r,int l0,int r0){
if(l0<=l&&r<=r0){
return sum[p]-sum[p0];
}
int mid=(l+r)/;
if(r0<=mid)return query(L[p0],L[p],l,mid,l0,r0);
else if(l0>mid)return query(R[p0],R[p],mid+,r,l0,r0);
else{
return query(L[p0],L[p],l,mid,l0,mid)+query(R[p0],R[p],mid+,r,mid+,r0);
}
}
void update(int p0,int &p,int l,int r,int pos,int val){
p=++tot;
sum[p]=sum[p0]+val,L[p]=L[p0],R[p]=R[p0];
if(l==r)return;
int mid=(l+r)/;
if(pos<=mid)update(L[p0],L[p],l,mid,pos,val);
else update(R[p0],R[p],mid+,r,pos,val);
}
int main()
{
// freopen("pair.in","r",stdin);
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d%d%d",&s[i].a,&s[i].b,&s[i].w);
c[++cnt]=s[i].a,c[++cnt]=s[i].b;
}
sort(c+,c+cnt+);
cnt=unique(c+,c+cnt+)-c-;
sort(s+,s+n+,cmp);
build(T[],,cnt);
for(int i=;i<=n;i++){
int a1=lower_bound(c+,c+cnt+,s[i].a)-c;
int b1=lower_bound(c+,c+cnt+,s[i].b)-c;
while(lst<a1){
maxx[lst+]=maxx[lst];
T[lst+]=T[lst];
lst++;
}
if(b1<a1)val=query(T[b1],T[a1],,cnt,a1,cnt);
else val=;
f[i]=maxx[min(b1,a1)]+val+s[i].w;
maxx[a1]=max(maxx[a1],f[i]);
update(T[a1],T[a1],,cnt,b1,s[i].w);
ans=max(ans,f[i]);
}
printf("%lld\n",ans);
return ;
}
个人玄学版本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=3e5+;
int n,cnt,T[N*],L[N*],R[N*],tot;
long long f[N],c[*N],val,maxx[N],sum[N*],ans,aa[N];
struct node{
long long a,b,w,a1,b1;
}s[N];
bool cmp(node x,node y){
return x.a<y.a;
}
void build(int &p,int l,int r){
p=++tot;
sum[p]=;
if(l==r)return;
int mid=(l+r)/;
build(L[p],l,mid);
build(R[p],mid+,r);
}
long long query(int p0,int p,int l,int r,int l0,int r0){
if(l0<=l&&r<=r0){
return sum[p]-sum[p0];
}
int mid=(l+r)/;
if(r0<=mid)return query(L[p0],L[p],l,mid,l0,r0);
else if(l0>mid)return query(R[p0],R[p],mid+,r,l0,r0);
else{
return query(L[p0],L[p],l,mid,l0,mid)+query(R[p0],R[p],mid+,r,mid+,r0);
}
}
void update(int p0,int &p,int l,int r,long long pos,long long val){
p=++tot;
sum[p]=sum[p0]+val,L[p]=L[p0],R[p]=R[p0];
if(l==r)return;
int mid=(l+r)/;
if(pos<=mid)update(L[p0],L[p],l,mid,pos,val);
else update(R[p0],R[p],mid+,r,pos,val);
}
int main()
{
// freopen("pair.in","r",stdin);
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%lld%lld%lld",&s[i].a,&s[i].b,&s[i].w);
c[++cnt]=s[i].a,c[++cnt]=s[i].b;
}
sort(c+,c+cnt+);
cnt=unique(c+,c+cnt+)-c-;
sort(s+,s+n+,cmp);
build(T[],,cnt);
for(int i=;i<=n;i++){
long long b1=lower_bound(c+,c+cnt+,s[i].b)-c;
update(T[i-],T[i],,cnt,b1,s[i].w);
aa[i]=s[i].a;
}
for(int i=;i<=n;i++){
long long a1=lower_bound(c+,c+cnt+,s[i].a)-c;
long long b1=lower_bound(c+,c+cnt+,s[i].b)-c;
int pos=upper_bound(aa+,aa+n+,s[i].b)-aa-;
if(pos>=i)pos=i-;
val=query(T[pos],T[i-],,cnt,a1,cnt);
f[i]=maxx[pos]+val+s[i].w;
maxx[i]=max(maxx[i-],f[i]);
ans=max(ans,f[i]);
}
printf("%lld\n",ans);
return ;
}
gls指点以后的清晰版本
T3:
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
const int N=2e5+;
const long long inf=1e18;
int n,m,p;
int a[N],vis[N],tag[N];
int ver[*N],Next[*N],head[N],tot,xx[*N];
long long dis[N],ans[N],edge[*N];
priority_queue<pair<long long,int> >q;
void add(int x,int y,long long z){
ver[++tot]=y;
Next[tot]=head[x];
head[x]=tot;
edge[tot]=z;
xx[tot]=x;
}
void dij(){
for(int i=;i<=n;i++){
if(!dis[i])q.push(make_pair(,i));
}
while(!q.empty()){
while(vis[q.top().second]&&q.size())q.pop();
if(q.empty())break;
int x=q.top().second;
q.pop();
vis[x]=;
for(int i=head[x];i;i=Next[i]){
int y=ver[i];
long long z=edge[i];
if(!vis[y]&&dis[x]+z<dis[y]){
dis[y]=dis[x]+z;
tag[y]=tag[x];
q.push(make_pair(-dis[y],y));
}
}
}
}
int main()
{
// freopen("1.in","r",stdin);
scanf("%d%d%d",&n,&m,&p);
for(int i=;i<=n;i++)dis[i]=inf;
for(int i=;i<=p;i++){
scanf("%d",&a[i]);
dis[a[i]]=;
tag[a[i]]=a[i];
}
for(int i=;i<=n;i++)ans[i]=inf;
for(int i=,x,y;i<=m;i++){
long long z;
scanf("%d%d%lld",&x,&y,&z);
add(x,y,z),add(y,x,z);
}
dij();
for(int i=;i<=tot;i+=){
int x=xx[i],y=ver[i];
if(tag[x]!=tag[y]){
long long d=dis[x]+dis[y]+edge[i];
ans[tag[x]]=min(ans[tag[x]],d);
ans[tag[y]]=min(ans[tag[y]],d);
}
}
for(int i=;i<=p;i++)printf("%lld ",ans[a[i]]);
return ;
}
别问,问就是死不足惜【大笑】
2019.10.29 csp-s模拟测试92 反思总结的更多相关文章
- 2019.10.29 CSP%您赛第四场t2
我太菜了我竟然不会分层图最短路 ____________________________________________________________________________________ ...
- csps模拟测试92反思
连着挂了三天T1了. 89: SPFA$vst$数组没清空 90:调试的时候多删了一句代码 91:没开$long long$ 我真是废物. 希望以后不要犯SB错误了
- 2019.8.3 [HZOI]NOIP模拟测试12 C. 分组
2019.8.3 [HZOI]NOIP模拟测试12 C. 分组 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 刚看这题觉得很难,于是数据点分治 k只有1和2两种,分别 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色
2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 数据结构学傻的做法: 对每种颜色开动态开点线段树直接维 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci)
2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci) 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 找规律 找两个节点的lca,需 ...
- csp-s模拟测试92
csp-s模拟测试92 关于$T1$:最短路这一定建边最短路. 关于$T2$:傻逼$Dp$这一定线段树优化$Dp$. 关于$T3$:最小生成树+树P+换跟一定是这样. 深入(?)思考$T1$:我是傻逼 ...
- 2019.8.14 NOIP模拟测试21 反思总结
模拟测试20的还没改完先咕着 各种细节问题=错失190pts T1大约三分钟搞出了式子,迅速码完,T2写了一半的时候怕最后被卡评测滚去交了,然后右端点没有初始化为n…但是这样还有80pts,而我后来还 ...
- 2019.8.9 NOIP模拟测试15 反思总结
日常爆炸,考得一次比一次差XD 可能还是被身体拖慢了学习的进度吧,虽然按理来说没有影响.大家听的我也听过,大家学的我也没有缺勤多少次. 那么果然还是能力问题吗……? 虽然不愿意承认,但显然就是这样.对 ...
- 2019.8.1 NOIP模拟测试11 反思总结
延迟了一天来补一个反思总结 急匆匆赶回来考试,我们这边大家的状态都稍微有一点差,不过最后的成绩总体来看好像还不错XD 其实这次拿分的大都是暴力[?],除了某些专注于某道题的人以及远程爆踩我们的某学车神 ...
随机推荐
- JavaScript编码指南
出其不意 1920年,William Strunk Jr的<英文写作指南>出版了,这本书给英语的风格定下了一个规范,而且已经沿用至今.代码其实也可以使用相似的方法加以改进. 本文接下来的部 ...
- Java代码启动/关闭进程
ProcessBuilder builder = new ProcessBuilder(命令,参数,参数...); Process process = builder.start(); br = ne ...
- 【转载】一定要会用selenium的等待,三种等待方式必会
转载地址:http://blog.csdn.net/huilan_same/article/details/52544521,感谢博文,学习了 原文: 发现太多人不会用等待了,博主今天实在是忍不住要给 ...
- MATLAB 中自定义函数的使用
MATLAB在文件内部(在函数内部)定义函数,但文件名以开头函数来命名,与Java中每个文件只能有一个公开类,但在文件内部还是可以定义其他非公开类一个道理. 无参函数 do.m function do ...
- Programming | 变量名的力量
命名准则 变量名要完全,准确的描述变量所代表的事物,一般而言,对变量的描述就是最佳的变量名.避免x,temp,i等泛泛而谈的变量名. 比如对于矩阵的循环,matrix[row][col]就比m[i][ ...
- 阿里云香港ECS搭建Shadowscoks
注(转https://yijingping.github.io/2016/11/29/fanqiang.html) 1 为什么FQ 作为一个技术人员, 最常用的就是Google.StackOverfl ...
- linux普通用户无法登录mysql
一.前言 本帖方法只适用于普通用户无法登录,但root用户可以登录的情况. 今天将war包放入linux后,运行报错,经过检查发现是数据库连接不上.奇怪的是,用户名和密码都是正确的,所以有了以下发现. ...
- String相加解析
Java代码 package com.utils.test; public class TestObject { public static void main(String[] args) { St ...
- git 命令行(三)-删除文件
在Git中,删除也是一个修改操作,我们实战一下,有一个多余的文件:src/common/Util2.js 我们需要删除这个文件, 一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用 rm命令 ...
- linux mint & ubuntu 安装QQ国际版
ubuntu安装QQ相对简单 下载qq国际版deb文件,直接安装即可. 下载地址: http://pan.baidu.com/s/1hqmYzlU 下面就重点说一下linux mint 安装qq. 1 ...