NEERC 2010, Eastern subregional contest

ACM ICPC 2009–2010 NEERC Moscow ACM ICPC 2009–2010 NEERC Moscow Subregional Contest Moscow, October 18, 2009 立即下载

 

只能把补了的题目放这儿了,先留个坑,怕忘记。

Problem G URAL 1806 Mobile Telegraphs

题意是:给定n个电话号码,每个号码是一个长度为10的仅含'0'~'9'的字符串,每两个电话号码a,b之间能通信,需要满足一下条件之一:

1.b能通过改变a中某一个数字的值获得;

2.b能通过交换a中两个数字获得。

n个电话号码不相同,且相互通信的费用由之间的最长公共前缀长度决定。

分析:

对于一个电话号码逐位判断改变某一位的值得到哪些号码,或者交换某两个数字的得到哪些号码,由此判断该号码能与哪些号码通信,通信费用也可以很快求出。

然后就是dijkstra 或者spfa了。注意map存储LL判断的时候,前导0 可能会被忽略。

另外在spfa或dij里面进行边的转移,而不事先把边求出来可以加速过程。

  1 #include <bits/stdc++.h>
  2 #define  esp 1e-6
  3 #define  inf 0x3f3f3f3f
  4 #define  pi acos(-1.0)
  5 #define  pb push_back
  6 #define  lson l, m, rt<<1
  7 #define  rson m+1, r, rt<<1|1
  8 #define  lowbit(x) (x&(-x))
  9 #define  mp(a, b) make_pair((a), (b))
 10 #define  bit(k) (1<<(k))
 11 #define  iin  freopen("pow.in", "r", stdin);
 12 #define  oout freopen("pow.out", "w", stdout);
 13 #define  in  freopen("solve_in.txt", "r", stdin);
 14 #define  out freopen("solve_out.txt", "w", stdout);
 15 #define  bug puts("********))))))");
 16 #define  Inout iin oout
 17 #define  inout in out
 18 
 19 #define  SET(a, v) memset(a, (v), sizeof(a))
 20 #define  SORT(a)   sort((a).begin(), (a).end())
 21 #define  REV(a)    reverse((a).begin(), (a).end())
 22 #define  READ(a, n) {REP(i, n) cin>>(a)[i];}
 23 #define  REP(i, n) for(int i = 0; i < (n); i++)
 24 #define  VREP(i, n, base) for(int i = (n); i >= (base); i--)
 25 #define  Rep(i, base, n) for(int i = (base); i < (n); i++)
 26 #define  REPS(s, i) for(int i = 0; (s)[i]; i++)
 27 #define  pf(x) ((x)*(x))
 28 #define  mod(n) ((n))
 29 #define  Log(a, b) (log((double)b)/log((double)a))
 30 #define Srand() srand((int)time(0))
 31 #define random(number) (rand()%number)
 32 #define random_range(a, b) (int)(((double)rand()/RAND_MAX)*(b-a) + a)
 33 
 34 using namespace std;
 35 typedef long long  LL;
 36 typedef unsigned long long ULL;
 37 typedef vector<unsigned short> VI;
 38 typedef pair<unsigned short,unsigned short> PII;
 39 typedef vector<PII> VII;
 40 typedef vector<PII, int> VIII;
 41 typedef VI:: iterator IT;
 42 typedef map<string, int> Mps;
 43 typedef map<LL, int> Mpi;
 44 typedef map<int, PII> Mpii;
 45 typedef map<PII, int> Mpiii;
 46 Mpi mps;
 47 const int maxn = 20;
 48 const int maxm = 50000 + 100;
 49 
 50 unsigned short co[maxn];
 51 unsigned short pa[maxm];
 52 LL a[12];
 53 
 54 LL s[maxm];
 55 int n;
 56 int d[maxm];
 57 bool inq[maxm];
 58 
 59 VII g[maxm];
 60 struct HeapNode
 61 {
 62     int d;
 63     unsigned short u;
 64     HeapNode() {}
 65     HeapNode(int d, unsigned short u):d(d), u(u) {}
 66     bool operator < (const HeapNode &rhs)const
 67     {
 68         return d > rhs.d;
 69     }
 70 };
 71 unsigned short cmp1(LL x, LL y)
 72 {
 73     char ss[2][12];
 74     sprintf(ss[0], "%010I64d", x);
 75     sprintf(ss[1] ,"%010I64d", y);
 76     int i = 0;
 77     for(i = 0; i <= 9; i++)
 78     {
 79         if(ss[0][i] != ss[1][i])
 80             break;
 81     }
 82     return co[i];
 83 }
 84 void bfs(int src)
 85 {
 86     priority_queue<HeapNode> q;
 87     q.push(HeapNode(0, src));
 88     d[src] = 0;
 89     inq[src] = false;
 90     while(!q.empty())
 91     {
 92         HeapNode u = q.top();
 93         int x = u.u;
 94         int dd = u.d;
 95         q.pop();
 96         if(inq[x])
 97             continue;
 98         inq[x] = true;
 99         char ss[12];
100         sprintf(ss+1, "%010I64d", s[x]);
101         Rep(j, 1, 11)
102         {
103             int c = ss[11-j]-'0';
104             REP(k, 10)
105             {
106                 if(k == c)
107                     continue;
108                 LL tmp = s[x] + (k-c)*a[j-1];
109                 if(mps.count(tmp))
110                 {
111                     int y = mps[tmp];
112                     int l = cmp1(s[x], s[y]);
113                     if(d[y] > dd + l)
114                     {
115                         pa[y] = x;
116                         d[y] = dd + l;
117                         q.push(HeapNode(d[y], y));
118                     }
119                 }
120             }
121         }
122         Rep(j, 1, 11) for(int k = j+1; k <= 10; k++)
123         {
124             int c1 = ss[11-j]-'0';
125             int c2 = ss[11-k]-'0';
126             if(c1 == c2)
127                 continue;
128             LL tmp = s[x] + (c2-c1)*a[j-1] + (c1-c2)*a[k-1];
129             if(mps.count(tmp))
130             {
131                 int y = mps[tmp];
132                 int l = cmp1(s[x], s[y]);
133                 if(d[y] >dd + l)
134                 {
135                     pa[y] = x;
136                     d[y] = dd + l;
137                     q.push(HeapNode(d[y], y));
138                 }
139             }
140         }
141     }
142 }
143 VI ans;
144 
145 void print(int s)
146 {
147     ans.pb(s);
148     while(1)
149     {
150         s = pa[s];
151         ans.pb(s);
152         if(s == 1)
153             break;
154     }
155     printf("%d\n", ans.size());
156     VREP(i, ans.size()-1, 0)
157     {
158         printf("%hu%c", ans[i], i == 0 ? '\n' : ' ');
159     }
160 }
161 int main()
162 {
163 
164     a[0] = 1;
165     Rep(i, 1, 11)
166     a[i] = a[i-1]*10;
167     scanf("%d", &n);
168     REP(i, 10)
169     scanf("%hu", co+i);
170     Rep(i, 1, n+1)
171     {
172         scanf("%I64d", s+i);
173         mps[s[i]] = i;
174         d[i] = inf;
175         inq[i] = false;
176     }
177 
178     bfs(1);
179     if(d[n] >= inf)
180         puts("-1");
181     else
182     {
183         printf("%d\n", d[n]);
184         print(n);
185     }
186     return 0;
187 }
View Code

Problem D URAL 1803 The Czechs' Rifles

题意:实际上就是要你求出前n个斐波那契数的k进制表示下,各个位数之和,然后再排序输出。

分析:首先可以证明的是,fn <= 2*fn-1,所以fn <= 2^n,所以可以这样求每个斐波那契数的k进制表示下各数位之和,将其表示成cnt进制的数,cnt为不超过n的k的最大次幂,

然后预处理出来小于cnt的各个数的k进制下数位之和。接下来就是通过前两项酸算出当前的斐波那契数,然后并将其k进制下各位加起来。这个过程其实就是模拟的一个大数加法的过程。

 

 1 #include <bits/stdc++.h>
 2 #define  in  freopen("solve_in.txt", "r", stdin);
 3 using namespace std;
 4 const int maxn = 50000 + 100;
 5 struct Node
 6 {
 7     int id, su;
 8     bool operator < (const Node &rhs)const
 9     {
10         if(su == rhs.su)
11             return id < rhs.id;
12         return su < rhs.su;
13     }
14 } ans[maxn];
15 int sum[maxn];
16 int dp[2][maxn];
17 
18 int n, k;
19 int main()
20 {
21     
22     scanf("%d%d", &k, &n);
23     int cnt = 1;
24     while(cnt * k < maxn)
25         cnt *= k;
26     for(int i = 0; i < maxn; i++)
27     {
28         int tmp = i;
29         while(tmp)
30         {
31             sum[i] += tmp%k;
32             tmp /= k;
33         }
34     }
35     dp[0][0] = dp[1][0] = 1;
36     ans[1].id = 1, ans[2].id  = 2;
37     ans[1].su = ans[2].su = 1;
38     int st = 1;
39     for(int i = 3; i <= n; i++)
40     {
41         int delta = 0;
42         int now = i&1;
43         int pre = now^1;
44         ans[i].id = i;
45         for(int k = 0; k < st; k++)
46         {
47             dp[now][k] += dp[pre][k] + delta;
48             if(dp[now][k] >= cnt)
49             {
50                 delta = dp[now][k]/cnt;
51                 dp[now][k] %= cnt;
52             }
53             else delta = 0;
54             ans[i].su += sum[dp[now][k]];
55         }
56         if(delta)
57             dp[now][st++] = delta;
58         ans[i].su += sum[delta];
59     }
60     std::sort(ans+1, ans+1+n);
61     for(int i = 1; i <= n; i++)
62         printf("%d%c", ans[i].id, i == n ? '\n' : ' ');
63     return 0;
64 }
View Code
Picture of ssh key 立即下载

相关推荐

政府科技管理者在推动区域科技成果转化过程中,如何系统性地识别和分析创新资源的配置瓶颈?.docx

政府科技管理者在推动区域科技成果转化过程中,如何系统性地识别和分析创新资源的配置瓶颈?

1806. Mobile Telegraphs

http://acm.timus.ru/problem.aspx?space=1&num=1806 只要算法对 ural 一般不会卡时间的 这个题是一个简单的最短路 spfa 关键在于找边 找边的方法是 对于每一个点 枚举它的所有可能的变化 搜索是否有和变化后的字符串一样的 搜索的时候既可以用 map 也可以 自己写字典树 map 写起来简单 不过 字典树效率要高 注意边的个...

weixin_30405421的博客 720

政府科技管理者如何提升区域科技成果转化项目的评价与筛选效率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

URAL 1806 Mobile Telegraphs

URAL_1806     这个题目思路比较明显,将边的关系找出来之后做最短路即可,但是由于N巨大,直接判断两个字符串能否转化是划不来的。     于是不妨将所有字符串放到哈希表中,然后对于当前字符串,枚举这个字符串改变一位、交换两位的情况,然后看能否在哈希表中找到变化之后的字符串,这样对于每个字符串至多枚举200种情况,复杂度还是可以接受的。 #include&lt;stdio.h&g...

weixin_34354173的博客 467

高校技术转移办公室人员在成果转化过程中如何快速提升技术推介效率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

两相交错并联Boost电路仿真模型(Simulink仿真实现)

内容概要:本文档系统性地介绍了基于Simulink平台的两相交错并联Boost电路仿真模型,属于电力电子变换器建模与仿真研究的重要组成部分。该模型采用交错并联结构,有效提升了系统效率、降低了输出电流纹波,并具备优良的动态响应与系统稳定性。文档不仅聚焦于该特定拓扑的开环与闭环控制实现,还整合了丰富的配套资源,涵盖多种主流DC-DC变换器(如Buck、Boost、LLC、CLLC)、功率因数校正(PFC)电路、PWM整流器、双向充放电系统以及新能源应用场景(如V2G、微电网)等领域的仿真模型。资源体系强调软开关技术、多相交错控制、系统级建模与参数优化设计,所有内容均提供可运行的Simulink仿真文件,部分包含详细的设计报告、计算书及参考文献,具有较强的工程实践与科研复现价值。; 适合人群:电气工程、自动化、电力电子与电力传动等相关专业的硕士博士研究生、高校科研人员,以及从事新能源发电、电动汽车、电源系统设计等领域的工程技术人员。; 使用场景及目标:①支撑高校电力电子与电力系统方向的科研项目,用于新型拓扑结构的建模与先进控制算法的验证;②服务于本科生与研究生的毕业设计、课程设计及高水平学术论文的仿真复现;③为企业在电源产品研发、新能源系统集成等环节提供成熟的仿真方案参考,缩短研发周期,降低试错成本。; 阅读建议:建议使用者首先访问文档末尾提供的完整资源目录链接,按需下载对应仿真模型;在实践过程中,应重点关注模型的参数配置、控制策略实现细节与仿真工况设置,结合配套的说明文档深入理解其工作原理与设计思路,推荐在MATLAB/Simulink环境中动手调试与二次开发,以充分掌握电力电子系统的核心技术。

neerc 2010 codeforces gym 101409B MR32 挂板子

这题只需要分段打表,段内在暴力判断一下就好啦,主要在于挂个板子,在打表的时候由于题目要求的素数数量级大概在1e7左右,所以当MR32发现有的时候,再暴力判断一下,防止MR32误判。半小时能出结果。#include &lt;bits/stdc++.h&gt; using namespace std; const int num[10001]={0,22201,39989,56533,72054,87...

weixin_42189317的博客 319

基于单片机的电动工程机械高压管理单元控制器设计.docx

基于单片机的电动工程机械高压管理单元控制器设计.docx

SDU省赛选拔-ACM ICPC 2010–2011, NEERC, Northern Subregional Contest

A. Alien Communication Masterclass【题目】给定序列A、B,构造一个等式,使得对于任意的A[i]进制都满足,对于任意的B[i]都 不满足【分析i】同一个式子,不同进制的结果如果不相同,一般是在进位上,首先我们可以想到如果对于A序列的进制都满足呢,可以写成x1 * x2 * x3 *x4 = 0这种,每种进制可以构造一个等于0的式子,对于A[i],可以构造(10 -

Yancy_的博客 1387

ESP32驱动GC9A01圆形屏实战:Arduino平台LVGL移植与图像显示优化

本文详细介绍了在Arduino平台上使用ESP32驱动GC9A01圆形屏的实战指南,包括硬件连接、LVGL移植与图像显示优化。通过SPI配置、LVGL库安装和双缓冲机制等技巧,帮助开发者快速实现高效显示效果,适用于智能家居控制面板等应用场景。

weixin_29182481的博客 735

[MTK][Android P]如何去掉差分包中的preloader分区

最近碰到一个问题,在进行差分升级的时候,会因为某些原因导致preloader hash值不匹配,升级失败,所以需要在差分升级的时候不升级preloader。 解决的方法,就是在制作AB分区的差分升级包的时候,把目标zip解压出来,把ab_partitions.txt中的分区名去掉,同时把preloader.img去掉 修改如下: Project/build/tools/releasetool...

thonmin的专栏 1434

2010 NEERC Eastern Subregional(Ural 1800~1809)解题小结

2015-02-0702:10:27   题目很有欧洲赛区的风格... 模拟赛过程不太顺利,习惯于国内的 技巧 and 算法 式解题,而忽略了计算机的最大优势:高速计算,也就是“暴力”!   然后数学题居多... A -Murphy's Law(Ural 1800):   物理题。注意一下单位,l(cm),h(cm),w(转/分钟)   首先考虑:当重心降到 l/2 的位置...

dingdi3021的博客 180

费斯托SPAN压力传感器的调试

本体为压力传感器,检测气压大小,通过设置参数,在上电上气时对气压进行判断,进而通过自身逻辑的判断,控制传感器的通断,进而控制机械部位的工作与运行;通电之后为如下图所示的样子有三个按键ABEdit键(编辑键、确认键)两步即可轻松连接。

大小曲奇的博客 1万+

例题6-20 理想路径(Ideal Path, NEERC 2010, UVa1599)

1. 若不考虑字典序问题,则显然可以直接bfs求解最短路。但是如何使得字典序最小呢? 2. 显然要贪心选取每一步的col值最小,为了保证贪心选取时每一步都仍为最短路,从终点进行一次bfs的到各点dis。 3. 取最小值的过程仍为bfs的过程,但是需要从多点出发访问下一层的bfs,用vector来实现,且访问层数即为最短距离。#include #include #include #incl

%%% 755

基于MATLAB/Simulink的四旋翼无人机PID控制与仿真(3)

《基于MATLAB/Simulink的四旋翼无人机PID控制与仿真》的第三篇,将为大家继续展示并完善控制与仿真模型。本文将在前文的基础上,完成控制环节增补、参数设置、测试等工作,在不考虑性能(低超调、快、准等)的前提下,保证系统对于一般输入(阶跃、斜坡)的响应稳定性。

jlx142857的博客 9321

2026最新openclaw(clawbot/moltbot)真正在自己个人电脑上搭建部署,配置飞书远程远程让AI助理操控电脑完成任务,以及结合ollama无限token实现7*24小时工作(附配置)

2026最新openclaw(clawbot/moltbot)真正在自己个人电脑上搭建部署,配置飞书远程远程让AI助理操控电脑完成任务,以及结合 ollama 无限token实现7*24小时工作,以及部署安装需要的 skills 完成复杂的工作任务(附完整可以运行的配置文件)。 很多人已经会配置安装 openclaw 了 ,但是 安装完成之后真正让电脑自动运行起来的很好,完成出色工作的更少,最常见的就是聊聊天,或者执行一些简单的命令,理解要让电脑自动化工作,openclaw、skills、大模型这三样。

代码讲故事 2962

Ideal Path, NEERC 2010, UVa1599 (题解+随机测试数据)

题意简述:一张n个顶点(1~n)m条边的无向图,每条边有颜色(用整数表示),保证存在从1到n的路径。要求给出从1出发到达n的最优路径:经过的边数最少,如果存在多种这样的走法,则取其中经过边的颜色序列按字典序最小的路径。输出这一颜色序列。原题:https://uva.onlinejudge.org/external/15/p1599.pdf分析:m的上限为200000,用BFS求最短路径,时间复杂度...

programmerYA的博客 644

【人工智能】在 cc-switch 中配置 AnyRouter 接入 Claude Code 完整指南

本文介绍了在cc-switch工具中配置AnyRouter中转服务以接入Claude Code的详细步骤。主要内容包括:1) 准备API令牌和端点地址;2) 填写基础信息和模型参数;3) 保存配置并重启终端生效;4) 常见问题排查方法。重点强调了API地址格式、模型ID准确性以及配置写入的必要性,帮助用户顺利完成中转服务配置,实现Claude 4.5版本的正常使用。

奶爸的编程之路,也就一周冷个三天 3103

2010–2011, NEERC, Northern Subregional C.Commuting Functions【思维】

题目大意: 给出长度为N的F【x】的值。 让我们求出最小字典序的G【x】的值,使得G【F【x】】=F【G【x】】; 思路: ①考虑到F【x】是成环的,那么我们肯定要在环上做文章。 假设我们有一个长度为8的环,我们如果知道了G【1】的值,那么G【2】~G【8】的值就都可以通过等式类推出来。 ②假设我们有一个长度为2的环,一个长度为4的环,假设长度为2的环在

mengxiang000000 600

【从零开始入门unity游戏开发之——C#篇37】进程、线程、C# 中实现多线程有多种方案和async/await异步编程

进程、线程、C# 中实现多线程有多种方案和async/await异步编程

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1469

关于“为爱发电”的一些说明~~

专栏教学资料+工程文件

数字IC/FPGA杂货铺,找一找,或许有你想要的~ 2675

2010–2011, NEERC, Northern Subregional训练总结【6/10】

题目位子: BNUOJ: A.Alien Communication Masterclass B.Bug2 C.Commuting Functions 水题,我们按照x坐标从小到大排序一下,然后维护相邻两个点的x坐标差的最小值,再按照y坐标从小到大排序一下,然后维护相邻两个点的y坐标差的最小值,然后相乘就是结果。 D.Defense

mengxiang000000 849

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【归并排序】 Merge_sort 实现源码 (自写)

学校算法老师给布置了个归并排序的实现作为

CD's Coding 951

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

16.7.12

(转载)算法题1 数组中唯一出现1次的数|唯一出现2次的数if(num&0x01) —> ox01就是十六进制的1, //判断num 与 0x01的按位与运算结果, //其实就是 求num二进制的最后一位, //等价于 求num除以2的余数 //等价于 判断num是否为奇数//c语言的按位运算符(转载自) & 按位与 | 按位或 ^ 按位异或 1. 按位与运算

thousfeet的博客 375

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

noip1997 街道 (动态规划,方格左下角到右上角路径数)

A1110. 街道 时间限制:1.0s   内存限制:256.0MB   总提交次数:547   AC次数:118   平均分:55.47 将本题分享到:            查看未格式化的试题   提交   试题讨论 试题来源   NOIP1997 普及组 问题描述   设有一个N*M(l≤ N≤50, l≤ M≤

把复杂的事情简单描述 4117
上一篇: bitset学习小记
下一篇: MemSQL Start[c]UP 2.0 - Round 2
rootial
博客等级 码龄15年 2粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值