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 其实这次拿分的大都是暴力[?],除了某些专注于某道题的人以及远程爆踩我们的某学车神 ...
随机推荐
- (转)小白科普, netty 有啥用?
随着移动互联网的爆发性增长,小明公司的电子商务系统访问量越来越大,由于现有系统是个单体的巨型应用,已经无法满足海量的并发请求,拆分势在必行. 在微服务的大潮之中, 架构师小明把系统拆分成了多个服务 ...
- JS中鲜为人知的问题: [] == ![]结果为true,而 {} == !{}却为false
console.log( [] == ![] ) // true console.log( {} == !{} ) // false 在比较字符串.数值和布尔值的相等性时,问题还比较简单.但在涉及到对 ...
- 转:浅析C++中的this指针
原文出处:http://blog.csdn.net/starlee/article/details/2062586 有下面的一个简单的类: class CNullPointCall { public: ...
- 暑期集训日志(Day0~Day5)
章·五:2019-07-15:明月不谙离恨苦,斜光到晓穿朱户 ·昨日小结: 昨天考试又是爆零边缘,除了难过就剩难过了. T1暴力打崩了只拿了5分. T2没给分时间.最后20分钟打了个残码.没仔细观察数 ...
- springcluoud入门
概念: Spring Cloud是一个分布式的整体解决方案. Spring Cloud 为开发者提供了在分布式系统(配置管理,服务发现,熔断,路由,微代理,控制总线,一次性token,全局琐,lead ...
- Android基础控件ListView和自定义BaseAdapter适配器
1.简介 ListView用于列表显示,相当于OC中的TableView,和适配器一块使用,相关属性: footerDividersEnabled:是否在footerView(表尾)前绘制一个分隔条, ...
- Android之TableLayout表格布局
1.相关属性 1.1.常用属性 android:collapseColumns 设置需要被隐藏的列的序列号 android:shrinkColumns 设置允许被收缩的列的序列号 android:st ...
- JDK源码阅读--StringBuffer
public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharS ...
- PAT甲级——A1106 Lowest Price in Supply Chain
A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyone invo ...
- VC窗体透明而控件不透明以及Static文本背景透明方法
出自http://my.oschina.net/ypimgt/blog/60951 优点: 1.Dialog 窗体完全透明. 2. 窗体上的控件不透明. DC 绘制的图形不透明. ...