【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# 图片存入SQL Server数据库
OpenFileDialog openfiledialog1 = new OpenFileDialog(); if (openfiledialog1.ShowDialog() == DialogRes ...
- beanutils中Lazy
public class LazyBean { // public static void main(String[] args) {// DynaBean dynaBean=ne ...
- form-validation--表单验证插件
基于jquery的validationEngine表单验证插件,根据官网提示,该插件支持IE6-8,Chrome浏览器,火狐,Safari,Opera 10,但由于有使用到了css3的阴影和圆角样式, ...
- EasyUi的快速开发框架
基于EasyUi的快速开发框架 先看图,下边这个简单的增.删.改.查,如果自己写代码实现,这两个页需要多少行代码? 如果再有类似的增.删.改.查,又需要多少行代码? 我最近搞的这个快速开发框架中, ...
- 【学习笔记】《JavaScript DOM 编程艺术》 ——总结
一.要点阐述 1,程序设计语言分为解释型和编译型两大类,JS属于解释型,在Web浏览器中一边解释一边执行. 2,"//"注释单行,"/*...*/"注释多行.反 ...
- C#开发ActiveX控件
昨天写了篇博客<Winform 程序嵌入WPF程序 并发送消息>,没有说明为什么要嵌入WPF程序,那么今天就来唠叨唠叨其中的一个使用场景,开发ActiveX控件 首先,新建一个类库工程Hu ...
- [转]JavaScriptCore by Example
原文:http://www.bignerdranch.com/blog/javascriptcore-example/ JavaScriptCore is not a new framework; i ...
- 致青春——IT之路
我的IT青春献给了笔试.面试.人事. 笔试 如果去问一个学生最怕的是什么,或许是考试.参加过高考的都知道,高三过的是什么日子,三天一大考,一天一小考. 当时没觉得什么,因为已经麻木了. 走入职场依然要 ...
- C# ToString格式控制符
C 货币 2.5.ToString("C") ¥2.50 D 十进制数 25.ToString("D5") 00025 E 科学型 25000.ToString ...
- TensorFlow 入门之手写识别(MNIST) softmax算法
TensorFlow 入门之手写识别(MNIST) softmax算法 MNIST flyu6 softmax回归 softmax回归算法 TensorFlow实现softmax softmax回归算 ...