做的时候觉得这套题好简单,结果一看发现是2012年的模拟题,估计就是普及+的难度吧,AK无压力

总结

  1. 第一题状压我智障的调了好几分钟,因为我的最终状态写的1<<n,智障了
  2. 第三题的dfs调了一会,也是有点难受的
  3. 吸取之前的教训,把开文件模板化了,方便检查

混乱的队伍

状压DP,注意开long long

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <set>
#include <ctime>
#include <cmath>
using namespace std; #define rep(i,s,t) for(int i=(int)(s);i<=(int)(t);++i)
#define forn(i,n) for(int i=1;i<=(int)(n);++i)
#define pb push_back
#define seta(h, x) memset(h, x, sizeof(h))
#define fr first
#define sc second
typedef long long qword;
const int maxn = 20;
const string task = "mixup2"; qword f[1<<maxn][maxn];
int s[maxn]; #define OK int main() {
#ifdef OK
freopen((task + ".in").data(),"r",stdin);
freopen((task + ".out").data(),"w",stdout);
ios::sync_with_stdio(0);
#endif // OK int N, K;
cin >> N >> K;
forn(i, N) cin >> s[i];
forn(i, N) f[1<<(i-1)][i] = 1; // Init
int LastSituation = (1<<N) - 1;
forn(i, LastSituation) {
forn(j, N) {
if (i & (1 << (j-1))) {
forn(next, N) {
if (abs(s[next] - s[j]) > K && (!(i & (1 << (next - 1))))) {
f[i|(1<<(next-1))][next] += f[i][j];
}
}
}
}
} qword ans = 0; rep(i,1,N)
ans += f[LastSituation][i];
cout << ans << endl;
}

安慰员工

这套题裸地最小生成树.

给定边的选择和出发点之后,原来的图实际上变成了一个有根树,最优路径是从根出发的Euler回路(每条边都经过两次)

一个有\(K\)个孩子的节点在Euler回路中出现了\(K+1\)次。除了根以外的其他节点,\(K+1\) 恰好是这个节点在树中的度。这就是说,度为 \(D\)的节点被访问了 \(D\) 次,根节点

要多被访问依次。这里,每一个边都被遍历了两次,每个方向各一次。我们还可以发现,计算一个点的花费\(D_i\)次等价于在连接它的每条边上计算一次。所以如果我们重

新定义边的花费的话,那么问题就转化为了求最小生成树了

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <set>
#include <ctime>
#include <cmath>
using namespace std; #define rep(i,s,t) for(int i=(int)(s);i<=(int)(t);++i)
#define forn(i,n) for(int i=1;i<=(int)(n);++i)
#define pb push_back
#define seta(h, x) memset(h, x, sizeof(h))
#define fr first
#define sc second
typedef long long qword;
const int maxn = 100010;
const string task = "cheer";
int c[maxn], r[maxn];
int val[maxn];
int from[maxn], to[maxn];
int fa[maxn]; bool cmp(const int& x, const int& y) {
return val[x] < val[y];
} int getRoot(int x) {
return fa[x] == x ? x : fa[x] = getRoot(fa[x]);
} int main() {
#ifndef Debug
freopen((task + ".in").data(),"r",stdin);
freopen((task + ".out").data(),"w",stdout);
#endif // Debug
int n, m;
cin >> n >> m;
qword ans = 0x7fffffff;
forn(i, n) {
cin >> c[i], fa[i] = i; ans = min(c[i], (int)ans);
}
int k;
forn(i, m) {
cin >> from[i] >> to[i] >> k;
val[i] = 1ll * k * 2 + c[from[i]] + c[to[i]];
r[i] = i;
}
sort(r + 1, r + 1 + m, cmp);
forn(i, m) {
int fo = from[r[i]], t = to[r[i]];
int uu = getRoot(fo), tt = getRoot(t);
qword ww = val[r[i]];
if (tt != uu) {
fa[tt] = uu;
ans += ww;
}
}
cout << ans << endl;
}

齿轮

裸地DFS

这是一个图论问题,图中的点表示齿轮,两个点之间有边当且仅当两个齿轮相互接触。我们知道从驱动齿轮到最终工作齿轮有唯一路径,我们需要找到路径,并且算出路径上所有齿轮的速度。我们从驱动齿轮出发,使用 BFS 或者 DFS,并在搜索过程中计算齿轮速度即可。

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <set>
#include <ctime>
#include <cmath>
using namespace std; #define rep(i,s,t) for(int i=(int)(s);i<=(int)(t);++i)
#define forn(i,n) for(int i=1;i<=(int)(n);++i)
#define pb push_back
#define seta(h, x) memset(h, x, sizeof(h))
#define fr first
#define sc second #define N 1110 struct edge{
double x, y, r, w;
}s[N]; bool flag;
int book[N], n;
double tx, ty; bool judge(edge a, edge b) {
double R = (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
if(R == (a.r+b.r)*(a.r+b.r)) return true;
return false;
} void dfs(double sum, int k) {
if(flag) return ;
if(s[k].x == tx && s[k].y == ty){
printf("%d\n", (int)sum);
flag = true;
return ;
}
for(int i = 0; i < n; i++){
if(!book[i] && judge(s[i], s[k])){
book[i] = 1;
s[i].w = s[k].w*s[k].r/s[i].r;
dfs(sum+s[i].w, i);
book[i] = 0;
}
}
} const string name = "baler"; int main() {
#ifndef OK
freopen((name + ".in").data(), "r",stdin);
freopen((name + ".out").data(), "w",stdout);
#endif // OK
int i, j, k;
seta(book, 0);
scanf("%d%lf%lf", &n, &tx, &ty);
for(i = 0; i < n; i++){
s[i].w = 0;
scanf("%lf%lf%lf", &s[i].x, &s[i].y, &s[i].r);
if(!s[i].x && !s[i].y) j = i;
}
s[j].w = 10000;
flag = false;
book[j] = 1;
dfs(10000, j);
return 0;
}

2012NOIP模拟试题的更多相关文章

  1. 模拟试题C

    模拟试题C 一.单项选择题(2′*14 =28′) 1.双线性法向插值法(Phong Shading)的优点是( ) A)法向计算精确 B)高光域准确 C)对光源和视点没有限制 D)速度较快 2.用编 ...

  2. 模拟试题B

    模拟试题B 一.单项选择题(2′*8 =16′) 1.灰度等级为256级,分辨率为2048*1024的显示器,至少需要的帧缓存容量为( ) A)512KB B)1MB C)2MB D)3MB 2.在多 ...

  3. 模拟试题A

    模拟试题A 一.单项选择题(2′*12=24′) 1.下面各种坐标变换中,会产生变换前后维度的改变的是( ) A)建模变换 B)观察变换 C)投影变换 D)视口变换 2.下列描述深度缓冲消隐算法的特点 ...

  4. CCF 模拟试题——出现次数最多的数 官方答案解析及自己写的正确答案

    前几天知道的CCF计算机职业资格认证考试,觉得好像比软考含金量高一些,就去了解了一下,做了模拟试题中的 “出现次数最多的数” 这道题,我的算法和官方答案算法不同,个人觉得觉得官方的好一点,没那么繁琐, ...

  5. 11.9 noip模拟试题

    NOIP2016 模拟赛——那些年,我们学过的文化课背单词(word.c/cpp/pas)[题目描述]fqk 退役后开始补习文化课啦, 于是他打开了英语必修一开始背单词. 看着满篇的单词非常头疼, 而 ...

  6. 10.26 noip模拟试题

    enc[问题背景]zhx 和他的妹子聊天.[问题描述]考虑一种简单的加密算法.假定所有句子都由小写英文字母构成,对于每一个字母,我们将它唯一地映射到另一个字母.例如考虑映射规则:a->b, b- ...

  7. 9.29noip模拟试题

    环上的游戏(cycle) 有一个取数的游戏.初始时,给出一个环,环上的每条边上都有一个非负整数.这些整数中至少有一个0.然后,将一枚硬币放在环上的一个节点上.两个玩家就是以这个放硬币的节点为起点开始这 ...

  8. 9.20 noip模拟试题

      Problem 1 双色球(ball.cpp/c/pas) [题目描述] 机房来了新一届的学弟学妹,邪恶的chenzeyu97发现一位学弟与他同名,于是他当起了善良的学长233 “来来来,学弟,我 ...

  9. 9.16noip模拟试题

    题目描述 在幻想乡,东风谷早苗是以高达控闻名的高中生宅巫女.某一天,早苗终于入手了最新款的钢达姆模型.作为最新的钢达姆,当然有了与以往不同的功能了,那就是它能够自动行走,厉害吧(好吧,我自重).早苗的 ...

随机推荐

  1. python的内存管理与垃圾回收机制学习

    一.python内存申请: 1.python的内存管理分为六层:最底的两层有OS控制.第三层是调用C的malloc和free等进行内存控制.第四层第五层是python的内存池.最上层使我们接触的直接对 ...

  2. 【BZOJ2141】排队 树状数组+分块

    [BZOJ2141]排队 Description 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家乐和和.红星幼儿园的小朋友们排起了长长地队伍,准备 ...

  3. undo文件丢失或损坏

    startup mount cp +DATA/ora11g/datafile/undotbs1.dbf alter database rename file '+DATA/ora11g/datafil ...

  4. sublime3095-注册码下载安装

    链接:http://pan.baidu.com/s/1hqejFKS 下载地址:下载 提取密码:egh5 ----- BEGIN LICENSE ----- Andrew Weber Single U ...

  5. 170807、intellij idea maven集成lombok实例

    简介: lombok 通过简单注解方式简化java代码.(如消除实体对象的get/setter方法.日志对象声明等...) 安装步骤: 1.选择支持注解处理:Settings-->Build-- ...

  6. 关于cdn原理(就是内容分发网络)

    cdn,我理解其本质就是为了解决距离远产生的速度问题,使用就近的服务. 从中国请求美国一台服务器上的图片.一般比较慢,因为距离这么远,网络传输是存在损耗的,距离越远,传输的时间就越长.一般会看到浏览器 ...

  7. vue自定义过滤器的创建和使用

    1.简单介绍   过滤器的作用:实现数据的筛选.过滤.格式化.   过滤器的本质是一个有参数,有返回值的方法.   过滤器可以用在两个地方:双花括号插值和v-bind表达式(后者从2.1.0+开始支持 ...

  8. SpringCloud--Ribbon负载均衡

    Ribbon实现客户端负载均衡 负载均衡:是对系统的高可用.网络压力的缓解和处理能力扩容的重要手段之一. 硬件负载均衡:主要通过在服务器节点之间安装专门用于负载均衡的设备: 软件负载均衡:通过在服务器 ...

  9. win10配置的静态/动态IP和 DNS的方法

    1.配置静态IP和DNS netsh interface ip set address name="以太网" source=static addr=192.168.9.145 ma ...

  10. 磁盘 I/O 性能监控的指标

    指标 1:每秒 I/O 数(IOPS 或 tps) 对于磁盘来说,一次磁盘的连续读或者连续写称为一次磁盘 I/O, 磁盘的 IOPS 就是每秒磁盘连续读次数和连续写次数之和.当传输小块不连续数据时,该 ...