NOIP2013 Day1
1.转圈游戏
https://www.luogu.org/problem/show?pid=1965
这道题失误极大,把freopen注释掉了,导致第一题暴0.
注意:在考试时一定要留下最后的时间检查格式!!!
由于此题中k的值很大,所以暴力只能过80%数据,需要用到快速幂。
#include <cstdio>
long long n,m,k,x,ans,t;
int main()
{
freopen("circle.in","r",stdin);
freopen("circle.out","w",stdout);
scanf("%lld%lld%lld%lld",&n,&m,&k,&x);
ans=; t=;
while(k)
{
if(k%==)ans=(ans*t)%n;
k/=;
t=((t%n)*(t%n))%n;
}
printf("%d",(x+(m*ans)%n)%n);
fclose(stdin);
fclose(stdout);
return ;
}
2.火柴排队
https://www.luogu.org/problem/show?pid=1966
这道题可用树状数组||逆序对||归并排序完成
献上树状数组代码:
#include<cstdio>
#include<algorithm>
using namespace std;
struct MyStruct
{
int data;
int loc;
}a[],b[];
int e[], n, c[];
int inline readint()
{
int x = ;
char c = getchar();
while (c<'' || c>'') c = getchar();
while (c >= ''&&c <= '')
{
x = x * + c - '';
c = getchar();
}
return x;
}
int lowbit(int x)
{
return x&-x;//树状数组实现
}
void add(int x,int t)
{
while (x <= n)
{
e[x] += t;
e[x] %=;
x += lowbit(x);//每次往后加,可以改变后面对应的和
}
}
int sum(int x)
{
int s = ;
while(x)
{
s += e[x];
s %= ;
x -= lowbit(x);//得到所求的和
}
return s;
}
bool cmp(MyStruct x, MyStruct y)
{
return x.data < y.data;
}
int main()
{
n = readint();
for (int i = ; i <= n; i++)
{
a[i].data = readint();
a[i].loc = i;//记录位置
}
for (int i = ; i <= n; i++)
{
b[i].data = readint();
b[i].loc = i;
}
sort(a + , a + n + , cmp);
sort(b + , b + n + , cmp);
for (int i = ; i <= n; i++)
{
c[a[i].loc] = b[i].loc;//离散优化
}
int ans = ;
for (int i = ; i <= n; i++)
{
add(c[i], );//离散优化后大小就是正确顺序的位置
ans += i - sum(c[i]);//当前位置,减去之前比他大的数的个数
ans %= maxm;
}
printf("%d", ans);
return ;
}
3.货车运输
本题用LCA+最大生成树完成。。。
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#define MAXN 10005
using namespace std;
int n,m;
struct T
{
int v;
int w;
int next;
}edge[]; struct P
{
int u;
int v;
int w;
}a[MAXN*];
bool cmp(P x,P y)
{
return x.w > y.w;
} int head[MAXN],cnt;
int f[MAXN];
int find(int x)//并查集,判断是否在同一个集合内
{
if(f[x] == x) return f[x];
else return f[x] = find(f[x]);
}
void Add_edge(int u,int v,int w)//树连边
{
edge[cnt].v = v;
edge[cnt].w = w;
edge[cnt].next = head[u];
head[u] = cnt++;
}
void Union(int u,int v)//联通块
{
int x = find(u);
int y = find(v);
if(x != y) f[x] = y;
}
void kruskal()//最大生成树
{
for(int i = ; i <= MAXN; i++)
f[i] = i;
for(int i = ; i <= m; i++)
{
int u = a[i].u,v = a[i].v;
if(find(u) != find(v))
{
Union(u,v);
Add_edge(u,v,a[i].w);
Add_edge(v,u,a[i].w);
}
}
} int up[MAXN][],g[MAXN][],h[MAXN];//up[i][j]表示i的第2^j个祖先,g[i][j]表示i到i的第2^j个祖先路径上的最小权值,h[i]表示i在树中深度
bool vis[MAXN];
void build_tree(int u)
{
vis[u] = ;
for(int i = head[u]; i != -; i = edge[i].next)
{
int v = edge[i].v;
if(!vis[v])
{
g[v][] = edge[i].w;
up[v][] = u;
h[v] = h[u]+;
build_tree(v);
}
}
}
//把较深的一个点往上提,并记录他到祖先边权最小值,用他的一个祖先代替他
int move(int &u,int H)
{
int res = ;
for(int i =; i >= ; i--)
{
if(h[up[u][i]] >= H)
{
res = min(res,g[u][i]);
u = up[u][i];
}
}
return res;
}
int query(int u,int v)//自认为是最难的地方
{
if(find(u) != find(v)) return -;
int res = ;
if(h[u] != h[v]) res = h[u] > h[v]?move(u,h[v]):move(v,h[u]);
if(u == v) return res;
for(int i = ; i >= ; i--)//倍增的同时记录最小值,两个点越来越逼近公共祖先
{
if(up[u][i] != up[v][i])
{
res = min(res,min(g[u][i],g[v][i]));
u = up[u][i];
v = up[v][i];
}
}
res = min(res,min(g[u][],g[v][]));//实际上到了这一步up[x][0] == up[y][0]因为它们的已经在同一棵子树里面
//printf("up[u][0]: %d\n",up[u][0]);
//printf("up[v][0]: %d\n",up[v][0]);
return res;
} int main()
{
memset(head,-,sizeof head);
scanf("%d%d",&n,&m);
for(int i = ; i <= m; i++)
scanf("%d%d%d",&a[i].u,&a[i].v,&a[i].w);
sort(a+,a+m+,cmp);
kruskal(); for(int i = ; i <= n; i++)//构建森林,并且初始化h,up,g
{
if(!vis[i])
{
h[i] = ;
build_tree(i);
g[i][] = ;
up[i][] = i;
}
}
for(int i = ; i <= ; i++)//预处理up和g,i大了也没有什么影响
{
for(int j = ; j <= n; j++)
{
up[j][i] = up[up[j][i-]][i-];
g[j][i] = min(g[j][i-],g[up[j][i-]][i-]);
}
} int q;
scanf("%d",&q);
for(int i = ; i <= q; i++)
{
int x,y;
scanf("%d%d",&x,&y);
printf("%d\n",query(x,y));
}
return ;
}
NOIP2013 Day1的更多相关文章
- noip2013/day1/1/转圈游戏
总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 128000kB 描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从 ...
- 洛谷1967货车运输 即 NOIP2013 DAY1 T3
题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多 ...
- 二模 (15)day2
第一题:Alice和Bob两个人正在玩一个游戏,游戏有很多种任务,难度为p的任务(p是正整数),有1/2p 的概率完成并得到2p−1分,如果完成不了,得0分.一开始每人都是0分,从Alice开始轮流做 ...
- noip2013提高组day1第一题-转圈游戏——快速幂典型应用
所谓的快速幂: // 计算 m^n % k 的快速幂算法 int quickpow(int m,int n,int k) { ; ) { ) b = (b*m)%k; n = n >> ; ...
- 【NOIP2013】DAY1题解+代码
T1 傻逼快速幂,敲敲就过了. 我跟你们讲个笑话当时我以为这个数据范围过不了于是想出了求GCD再推规律什么的magic方法中途还咨询了某个学长. 然后怎么想都是不可做. ……直到我发现我昨年的代码一个 ...
- NOIP2013 提高组 Day1
https://www.luogu.org/problem/lists?name=&orderitem=pid&tag=83%7C30 期望得分:100+100+100=300 实际得 ...
- JZOJ 3534. 【NOIP2013提高组day1】货车运输
Description A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的 ...
- Noip2013之路
当我回望过去的一年,我想,我对自己没有任何的愧疚,因为我每一个脚印,都踩的很坚实. 第一次参加模拟赛,第一次接触NOIP的规则,虽然考得不是特别好,但是还是很有收获的,首先,数组一定要开得足够大,不然 ...
- NOIP2013题解
NOIP2013题解 Day1 转圈游戏 circle 快速幂模板题. #include<iostream> using namespace std; int n,m,k,x; int f ...
随机推荐
- JDK的KeyTool和KeyStore等加密相关
Keytool是一个有效的安全钥匙和证书的管理工具. Java 中的 keytool.exe (位于JDK\Bin下)可以用来创建数字证书,所有的数字证书是以一条一条(用别名区别,不区分大小)地存储在 ...
- VS2010制作安装程序
转自(http://blog.csdn.net/wenmang1977/article/details/7733685) 序 前些天想写一下制作安装程序,由于要写的内容比较多,一拖再拖,不过坚持就是胜 ...
- L3-010. 是否完全二叉搜索树
L3-010. 是否完全二叉搜索树 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 将一系列给定数字顺序插入一个初始为空的二叉搜 ...
- 【javascript基础】 JavaScript defer和async区别
defer该属性用来通知浏览器,这段脚本代码将不会产生任何文档内容.例如 JavaScript代码中的document.write()方法将不会骑作用,浏览器遇到这样的代码将会忽略,并继续执行后面的代 ...
- 将VS2010环境设置为VC6.0样式(字体、前景色、背景色、Visual Assist X等)
一.设置字体. 使用字体:Fixedsys Excelsior 3.01. 步骤1:下载字体. 步骤2:安装字体,控制面板->字体,复制下载的字体进去. 步骤3:打开VS2010,选择菜单:To ...
- LVS模式一:直接路由模式DR(Direct Routing)
(一)LVS 一.LVS的了解 LVS(Linux Virtual Server)可以理解为一个虚拟服务器系统. Internet的飞速发展,网络带宽的增长,Web服务中越来越多地使用CGI.动态主页 ...
- Myeclipse WEB工程JSP使用JNDI 数据库连接池连接Mysql数据库
在网上查了很多,最后实现了.下面写一下过程: 首先,在WEBROOT/META-INF下建一个文件context.xml,内容为: <?xml version="1.0" e ...
- AOP代理模式
AOP 在Spring框架中被作为核心组成部分之一,的确Spring将AOP发挥到很强大的功能.最常见的就是事务控制.工作之余,对于使用的工具,不免需要了解其所以然.学习了一下,写了些程序帮助理解. ...
- ubuntu maven install&config
可以通过命令直接安装,我还是用文件安装. 1,下载apache-maven-3.5.0-bin.tar.gz二进制压缩文件 https://maven.apache.org/download.cgi ...
- Web访问控制
最近某婚介公司的实习生赵大胖的领导姚无发给赵大胖安排了一个任务: 给网站加上访问控制,游客不能访问看到美女的资料,只有注册的会员才能浏览. 赵大胖一时没有很好的思路,然后找到了研发组大佬老郑头. 老郑 ...