【NOIP2013】DAY1题解+代码
T1
傻逼快速幂,敲敲就过了。
我跟你们讲个笑话当时我以为这个数据范围过不了于是想出了求GCD再推规律什么的magic方法中途还咨询了某个学长。
然后怎么想都是不可做。
……直到我发现我昨年的代码一个傻逼快速幂就过了=A=
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cmath>
using namespace std;
int n=,m=,k=,x=;
long long quick(int x,int y);
int main(void)
{
freopen("circle.in","r",stdin);
freopen("circle.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&k,&x);
long long ans=quick(,k);
ans=ans*m%n;
ans=(ans+x)%n;
printf("%lld",ans);
return ;
} long long quick(int x,int y)
{
if(y==)return x;
int ins=y/;
long long tot=0ll;
tot=quick(x,ins)%n;
tot=tot*tot%n;
if(y%)tot=tot*x%n;
return tot;
}
T2
排个序,离散化之后找逆序对即可。
这里要注意的是,我们先把两个数列离散化+排序之后,是找第二个数列里的数在第一个数列里出现的位置,然后对这个序列求逆序对。
我为了这个映射卖了很多蠢就不说了。
我会说因为我不想写归并于是用了树状数组求逆序对?
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
struct line
{
int sum;
int num;
};
line xl_a[],xl_b[];
int n=,stack[]={},top=;
int mark[]={},tree[]={};
const int mod=;
bool cmp(line a,line b);
bool kp(line a,line b);
int lowbit(int x);
int red(int x);
void add(int x);
int main(void)
{
freopen("match.in","r",stdin);
freopen("match.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&xl_a[i].sum),xl_a[i].num=i;
sort(xl_a+,xl_a+n+,cmp);
for(int i=;i<=n;i++)xl_a[i].sum=i; for(int i=;i<=n;i++)scanf("%d",&xl_b[i].sum),xl_b[i].num=i;
sort(xl_b+,xl_b+n+,cmp);
for(int i=;i<=n;i++)xl_b[i].sum=i; sort(xl_b+,xl_b+n+,kp);
for(int i=;i<=n;i++)mark[i]=xl_a[xl_b[i].sum].num; long long ans=; for(int i=;i<=n;i++)
{
ans+=red(n)-red(mark[i]);
ans%=mod;
add(mark[i]);
}
printf("%d",ans);
return ;
} bool cmp(line a,line b)
{
if(a.sum<b.sum)return ;
return ;
} bool kp(line a,line b)
{
if(a.num<b.num)return ;
return ;
} int lowbit(int x){return x&-x;} int red(int x)
{
int tot=;
while(x)
{
tot+=tree[x];
tot%=mod;
x-=lowbit(x);
}
return tot;
} void add(int x)
{
while(x<=n)
{
tree[x]++;
tree[x]%=mod;
x+=lowbit(x);
}
}
T3
最大生成树+树上倍增标准模板
调了半小时发现我预处理写错了。
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
struct bian
{
int x;
int y;
int v;
};
bian a[];//因为我们是存储双向边所以边数量x2
struct lb
{
int u;
int to;
int val;
};
lb line[];
int head[]={},fa[]={},n=,m=,q=;
int cnt_1=,cnt_2=,deep[]={};
int beiz[][]={},value[][]={};
//最大生成树函数x3
void kruskal();
int fid(int x);
void heb(int x,int y);
//树上倍增
void dfs(int nw);//确定树
void pre(int x);//倍增预处理
int ask(int x,int y);//查询两点之间的公共祖先
//乱七八糟的函数
void add(int f,int t,int val);
bool cmp(bian A,bian B);
int main(void)
{
freopen("truck.in","r",stdin);
freopen("truck.out","w",stdout);
scanf("%d%d",&n,&m);
int b=,c=,d=;
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&b,&c,&d);
cnt_1++;
a[cnt_1].x=b,a[cnt_1].y=c,a[cnt_1].v=d;
swap(b,c);
cnt_1++;
a[cnt_1].x=b,a[cnt_1].y=c,a[cnt_1].v=d;
}
sort(a+,a+cnt_1+,cmp);
for(int i=;i<=n;i++)fa[i]=i;
kruskal();
memset(beiz,-,sizeof(beiz));
beiz[][]=,value[][]=0x7ffffff,deep[]=;
dfs();
pre();
scanf("%d",&q);//我觉得是根节点的问题……
for(int i=;i<=q;i++)
{
scanf("%d%d",&b,&c);
if(beiz[b][]==-||beiz[c][]==-)
{
printf("-1\n");
continue;
}
printf("%d\n",ask(b,c));
}
return ;
}
bool cmp(bian A,bian B)
{
if(A.v>B.v)return ;
return ;
} int fid(int x)
{
if(fa[x]==x)return x;
fa[x]=fid(fa[x]);
return fa[x];
} void heb(int x,int y)
{
fa[x]=y;
return;
} void kruskal()
{
int cho=,f_x=,f_y=;
for(int i=;i<=cnt_1;i++)
{
if(cho==n-)break;
f_x=fid(a[i].x);
f_y=fid(a[i].y);
if(f_x==f_y)continue;
cho++;
add(a[i].x,a[i].y,a[i].v);
add(a[i].y,a[i].x,a[i].v);
heb(f_x,f_y);
}
return;
} void add(int f,int t,int val)
{
line[++cnt_2].u=t;
line[cnt_2].to=head[f];
line[cnt_2].val=val;
head[f]=cnt_2;
return;
} void dfs(int nw)
{
if(nw>n)return;
int next=;
for(int i=head[nw];i>;i=line[i].to)
{
next=line[i].u;
if(next==beiz[nw][])continue;
beiz[next][]=nw;
value[next][]=line[i].val;
deep[next]=deep[nw]+;
dfs(next);
}
return;
} void pre(int nw)
{
if(nw>=)return;
for(int i=;i<=n;i++)
{
beiz[i][nw]=beiz[beiz[i][nw-]][nw-];
value[i][nw]=min(value[i][nw-],value[beiz[i][nw-]][nw-]);
}
pre(nw+);
return;
} int ask(int x,int y)
{
if(deep[x]<deep[y])swap(x,y);
int ans=0x7fffffff;
for(int i=;i>=;i--)if(deep[x]-(<<i)>=deep[y])ans=min(ans,value[x][i]),x=beiz[x][i];
if(x==y)return ans;
for(int i=;i>=;i--)
{
if(beiz[x][i]!=beiz[y][i])
{
ans=min(ans,value[x][i]);
x=beiz[x][i];
ans=min(ans,value[y][i]);
y=beiz[y][i];
}
}
ans=min(ans,value[x][]);
ans=min(ans,value[y][]);
return ans;
}
【NOIP2013】DAY1题解+代码的更多相关文章
- 【NOIP2014】Day1题解+代码
Day1 T1 签到题,模拟一下随便写就能过. 不过小心像我一样表打错傻逼的调了10min. #include <algorithm> #include <iostream> ...
- 洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication【最小割】分析+题解代码
洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication[最小割]分析+题解代码 题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流. ...
- 洛谷 P2762 太空飞行计划问题 P3410 拍照【最大权闭合子图】题解+代码
洛谷 P2762 太空飞行计划问题 P3410 拍照[最大权闭合子图]题解+代码 最大权闭合子图 定义: 如果对于一个点集合,其中任何一个点都不能到达此集合以外的点,这就叫做闭合子图.每个点都有一个权 ...
- 洛谷P2891 Dining P1402 酒店之王【类二分图匹配】题解+代码
洛谷P2891 Dining P1402 酒店之王[类二分图匹配]题解+代码 酒店之王 题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的 ...
- 洛谷 P2194 HXY烧情侣【Tarjan缩点】 分析+题解代码
洛谷 P2194 HXY烧情侣[Tarjan缩点] 分析+题解代码 题目描述: 众所周知,HXY已经加入了FFF团.现在她要开始喜(sang)闻(xin)乐(bing)见(kuang)地烧情侣了.这里 ...
- 洛谷P2832 行路难 分析+题解代码【玄学最短路】
洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...
- 洛谷P1783 海滩防御 分析+题解代码
洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...
- 洛谷P1854 花店橱窗布置 分析+题解代码
洛谷P1854 花店橱窗布置 分析+题解代码 蒟蒻的第一道提高+/省选-,纪念一下. 题目描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定 ...
- THUSC2017 Day1题解
THUSC2017 Day1题解 巧克力 题目描述 "人生就像一盒巧克力,你永远不知道吃到的下一块是什么味道." 明明收到了一大块巧克力,里面有若干小块,排成n行m列.每一小块都有 ...
随机推荐
- C语言中的内存对齐
最近看了好多,也编了好多C语言的浩强哥书后的题,总觉的很不爽,真的真的好怀念linux驱动的代码,好怀念那下划线,那结构体,虽然自己还很菜. 同时看了一遍陈正冲老师的C语言深度剖析,收益很多,又把唐老 ...
- OSGi.NET 学习笔记
OSGi.NET 学习笔记 [目录] 持续更新和调整中,本人学习笔记,非官方文档,难免疏漏,仅供参考. OSGi.NET SDK下载地址. 前言及环境准备 模块化和插件化 概念 实例 小结 面向服 ...
- 《剑指Offer》面试题-用两个栈实现队列
题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作.队列中的元素为int类型. 输入: 每个输入文件包含一个测试样例.对于每个测试样例,第一行输入一个n(1<=n<=100 ...
- 监听JVM关闭
使用Runtime的addShutdownHook(thread)方法: for(int i=0; i<5; i++){ System.out.println(i); } Thread th = ...
- queue,指针求最短路的区别
这里以spfa为例://都用邻接表存边: 指针: int h=1,t=1; q[h]=x; while(h<=t){ int u=q[h]; vis[u]=0; for(int i=head[u ...
- D11
=-=感觉今天的题目好难... 主要是没有碰到过,所以会觉得不懂怎么写.. 其实现在想想,T1,T2,T3其实都好水..T1其实没有做过还真不会,有做过的话就是个大水题了 T2找最小环..超级裸的,但 ...
- go语言 strconv.ParseInt 的例子
golang strconv.ParseInt 是将字符串转换为数字的函数,功能灰常之强大,看的我口水直流. func ParseInt(s string, base int, bitSize int ...
- YSlow的性能测试提示
Add an Expires or a Cache-Control Header tag: server There are two aspects to this rule: For static ...
- 依赖注入DI
说AOP不得不提依赖注入,先来看看一个实例.通过实例来解释依赖注入和它的用途. 我们现在要设计一个关于衣服的上架功能,有时候需要进行促销,我们现在知道的促销方式有打1折,和打2折. 最初的方案: pu ...
- 利用connect建立前端开发服务器
利用connect建立前端开发服务器 对于前后端完全分离的系统,开发时候我们需要给前端配置服务器,当然我们可以选择Nginx之类的服务器进行配置,但我们也能使用NodeJS构建高自由度的前端开发服务器 ...