【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列.每一小块都有 ...
随机推荐
- 在Ubuntu上安装 nginx, MySQL, PHP (LEMP),phpmyadmin和WordPress
0)更新 Apt-Get 终端命令:sudo apt-get update 1) 安装php sudo apt-get install php5 2)安装MySql 终端命令: sudo apt-ge ...
- 深入剖析Provider Model
Membership三步曲之进阶篇 - 深入剖析Provider Model Membership 三步曲之进阶篇 - 深入剖析Provider Model 本文的目标是让每一个人都知道Provide ...
- MVC中用Jpaginate分页
MVC中用Jpaginate分页 So easy!(兼容ie家族) 看过几款分页插件,觉得Jpaginate比较简约,样式也比较容易的定制,而且体验也比较好,支持鼠标滑动效果.先上效果图: 整个过 ...
- 对于vijos11.2模拟赛
特意起了个傻逼标题,只是想提醒一下自己以后不要犯逗(所以应该没有什么神犇点进来吧?) T1,T3 当场写的时候就觉得是不可写的,看了题解之后还是觉得不可写,人弱没办法.到了这个时候也懒得管这么难的东西 ...
- [转]About the security content of iOS 8
Source:http://support.apple.com/kb/HT6441 For the protection of our customers, Apple does not disclo ...
- storm源码之storm代码结构【译】
storm源码之storm代码结构[译] 说明:本文翻译自Storm在GitHub上的官方Wiki中提供的Storm代码结构描述一节Structure of the codebase,希望对正在基于S ...
- MongoDB学习之--安全和认证
MongoDB学习之--安全和认证 本文主要介绍两部分内容,Mongodb的安全检查配置以及安全认证操作: 虽然确保系统安全是系统管理员的重要工作,但是作为程序员了解其机制也是大有好处的,毕竟不是每个 ...
- IceMx.Mvc 我的js MVC 框架五、完善植物大战僵尸(雏形版增加动画)
有图有真相 说明 实在找不到僵尸的素材,从网上扒了一个山寨的僵尸,只有4张的一个连续图片,所以动作有点僵硬,植物的图片是自己处理的,非专业所以……咳咳!. 背景是自己抠下来2块儿拼接的,看在这么辛苦的 ...
- WP8开发札记(一)WP8应用生命周期管理
在介绍生命周期前,我们先了解两个相关的概念. 1.墓碑机制:WP8与Android采用的真后台机制不同,WP8采用的是墓碑机制.一旦从当前应用程序离开(非退出),该应用会被墓碑化,这样可以更好的管理( ...
- 一步一步深入spring(3)--spring的依赖注入方式
对于spring配置一个bean时,如果需要给该bean提供一些初始化参数,则需要通过依赖注入方式,所谓的依赖注入就是通过spring将bean所需要的一些参数传递到bean实例对象的过程,sprin ...