NWERC 2017

A. Ascending Photo

题意:给你一个长度为n的整数序列a[1-n],n不超过1e6。让你把它切成最少的片段,使得切完之后重排片段可以使序列不严格递增。问最少切几段。

观察:

  首先可以离散化一下,把所有的值map到m个数[1,2,...,m],m <= n <= 1e6。然后我们可以线性扫一遍,把相邻且数字相同的位置连在一起形成连通分量,因为可以发现,连续的相同数字不需要被切开(如果有被切开,可以把切口平移至左端或者右端,并且不破坏答案成立)。

  然后我们就可以按照数值从小到大考虑每个联通分量前面切不切了。比如现在枚举到v,v对应的有一个区间[L1, R1]。我们看一下a[L1-1]是不是 v-1。如果a[L1-1] = v-1, 我们可以少切(a[L1-1], a[L1])这一刀。如果对于一个v,有多个区间满足上述条件,我们至多只能少切其中的一个。

  还有一个比较特殊的情况,就是,对于a[L1-1] = v-1,  我们想要少切(a[L1-1], a[L1])这一刀,但是a[L1-1]所对应的片段与其前面一个值为v-2的片段已经少切了一刀,我们要判断一下(a[L1-1], a[L1])可不可以切。比如 a[1-4] = [3 2 3 4],a[2]前面切一刀,然后a[3] = 3, a[2] = 2, 我们可以少切(a[2], a[3])这一刀,再看a[4]。虽然a[3] = 3, a[4] = 4,但是我们不能少切(a[3], a[4])这一刀,因为那样的话会形成(a[2] a[3] a[4]) = (2 3 4),剩下a[1]=3,没有办法重排。所以对于(a[2], a[3]),我们在决定要少切这刀的时候,发现这个v=3的片段不是唯一的(即外面还有别的3的片段),那么我们就要求这个片段之后v=4的片段不能少切。

  再考虑一个例子,a[1-5] = [2 3 4 2 3], 我们发现(a[1], a[2]) = (a[4], a[5]) = (2, 3),都可以少切一刀,该怎么选择呢?方法就是不用选择。一旦对于一种(v-1, v)有不少与2种合法的位置,那么就一定可以选择其中的位置少切一刀,使得对后面的操作没有影响。比如,a[1-5] = [2 3 4 2 3], 我们先少切(a[1], a[2])这一刀,后来发现(a[2], a[3])本来也可以少切的,那么我们一开始就不要少切(a[1] a[2]),反而去少切(a[4] a[5]), 这样就可以顺利的少切(a[2] a[3])了。

code:

 1 /*
 2  by skydog
 3  */
 4 #include <iostream>
 5 #include <cstdio>
 6 #include <vector>
 7 #include <utility>
 8 #include <algorithm>
 9 #include <cmath>
10 #include <cstring>
11 #include <map>
12 #include <set>
13 #include <stack>
14 #include <queue>
15 #include <deque>
16 #include <cassert>
17 #include <list>
18 using namespace std;
19 typedef long long ll;
20 typedef pair<int, int> ii;
21 typedef pair<ll, ll> l4;
22
23 #define mp make_pair
24 #define pb push_back
25 #define db(x) cerr << #x << " = " << x << endl
26
27 typedef unsigned long long ull;
28 const int maxn = 1e6+1;
29 int a[maxn], b[maxn], vis[maxn], n;
30 vector<ii> interval[maxn];
31
32 int main()
33 {
34     scanf("%d", &n);
35     for (int i = 1; i <= n; ++i)
36         scanf("%d", a+i);
37     memcpy(b+1, a+1, n*sizeof(int));
38     sort(b+1, b+1+n);
39     int m = unique(b+1, b+1+n)-(b+1);
40     for (int i = 1; i <= n; ++i)
41         a[i] = lower_bound(b+1, b+1+m, a[i])-b;
42     a[0] = m+1;
43     for (int i = 1, nxt; i <= n; i = nxt)
44     {
45         nxt = i+1;
46         while (nxt <= n && a[nxt] == a[i])
47             ++nxt;
48         interval[a[i]].pb(mp(i, nxt-1));
49         i = nxt;
50     }
51     int ans = -1; //suppose we need to cut a[0] and a[1].
52     for (int i = 1; i <= n; ++i)
53     {
54         int cnt = 0, tail;
55         for (auto e : interval[i])
56         {
57             ++ans;
58             if (a[e.first-1] == i-1)
59             {
60                 if (vis[e.first-1]);
61                 else
62                 {
63                     ++cnt;
64                     tail = e.second;
65                 }
66             }
67         }
68         if (cnt == 0);
69         else
70         {
71             --ans;
72             if (interval[i].size() != 1 && cnt == 1)
73                 vis[tail] = true;
74         }
75     }
76     printf("%d\n", ans);
77 }
78 // 12 1 2 2 3 3 1 2 3 4 1 2 3

WA:没有考虑到什么时候不能少切。

B. Boss Battls

题意:

观察:看样例猜出答案应该是max(1, n-2)。也可以考虑最坏情况,用环形[0, n-1]表示圆环,假设我们是在0的位置,为了堵住boss,我们沿着顺时针轰炸,且每次隔一格。然后最差情况boss起初在n-2的位置,和我们同方向运动。

code:

 1 /*
 2  by skydog
 3  */
 4 #include <iostream>
 5 #include <cstdio>
 6 #include <vector>
 7 #include <utility>
 8 #include <algorithm>
 9 #include <cmath>
10 #include <cstring>
11 #include <map>
12 #include <set>
13 #include <stack>
14 #include <queue>
15 #include <deque>
16 #include <cassert>
17 #include <list>
18 using namespace std;
19 typedef long long ll;
20 typedef pair<int, int> ii;
21 typedef pair<ll, ll> l4;
22
23 #define mp make_pair
24 #define pb push_back
25 #define db(x) cerr << #x << " = " << x << endl
26
27 int main()
28 {
29     int n;
30     scanf("%d", &n);
31     printf("%d\n", max(1, n-2));
32 }

WA:

C. Connect the Dots

题意:

观察:

code:

WA:

D. Dunglish

题意:

观察:

code:

 1 /*
 2  by skydog
 3  */
 4 #include <iostream>
 5 #include <cstdio>
 6 #include <vector>
 7 #include <utility>
 8 #include <algorithm>
 9 #include <cmath>
10 #include <cstring>
11 #include <map>
12 #include <set>
13 #include <stack>
14 #include <queue>
15 #include <deque>
16 #include <cassert>
17 #include <list>
18 using namespace std;
19 typedef long long ll;
20 typedef pair<int, int> ii;
21 typedef pair<ll, ll> l4;
22
23 #define mp make_pair
24 #define pb push_back
25 #define db(x) cerr << #x << " = " << x << endl
26
27 map<string, ll> ma[2];
28 map<string, string> translate;
29 vector<string> res;
30 inline int tag(const string&str)
31 {
32     return str[0] == ‘c‘;
33 }
34 int main()
35 {
36     ios::sync_with_stdio(false);
37     cin.tie(0);
38     int n, m;
39     cin >> n;
40     res.resize(n);
41     for (auto &e : res)
42         cin >> e;
43     cin >> m;
44     for (int i = 0; i < m; ++i)
45     {
46         string a, b, c;
47         cin >> a >> b >> c;
48         translate[a] = b;
49         ma[tag(c)][a] += 1;
50     }
51     ll tot = 1, correct = 1;
52     for (const auto &e : res)
53     {
54         correct *= ma[1][e];
55         tot *= (ma[0][e] + ma[1][e]);
56     }
57     if (tot == 1)
58     {
59         for (int i = 0; i < n; ++i)
60             cout << translate[res[i]] << (i==n-1?‘\n‘:‘ ‘);
61         cout << (correct?"correct":"incorrect") << ‘\n‘;
62     }
63     else
64     {
65         cout << correct << " correct\n";
66         cout << tot-correct << " incorrect\n";
67     }
68 }

WA:

E. English Restaurant

题意:

观察:

code:

WA:

F. Factor-Free Tree

题意:

观察:

code:

WA:

G. Glyph Recognition

题意:

观察:

code:

WA:

H. High Score

题意:

观察:

code:

WA:

I. Installing Apps

题意:

观察:

code:

WA:

J. Juggling Toupe

题意:

观察:

code:

WA:

K. Knockout Tourmanent

题意:

观察:

code:

WA:

原文地址:https://www.cnblogs.com/skyette/p/8468968.html

时间: 2024-10-30 04:19:14

NWERC 2017的相关文章

2017-2018 Northwestern European Regional Contest (NWERC 2017)

Rank Solved A B C D E F G H I J K --/-- 6/11 . O . O . . O O O . O O: 当场通过 ?: 赛后通过 .: 尚未通过 A Ascending Photo unsolved B Boss Battle solved by chelly chelly's solution C Connect the Dots unsolved D Dunglish solved by ABerror ABerror's solution E Engli

训练记录PART1

11/05 bestcoder #93 C 等价于给出很多环,等概率选择N个点,收益为出现过点的环的环长lcm.不同的环只有 \(\sqrt {26}=6\) 个,用\(f_S\)表示点出现在状态为S的那些环里的选取总数,DP一下即可. bestcoder #93 D 考虑meet in the middle.推一下式子,设左侧选的数和为\(A_{left}t\),两两乘积之和为\(B_{left}\),那么满足\(B_{left}+B_{right}+A_{left}*A_{right}>=0

中斯间极积况意称天参并

措不及防下只得单手一张领域盾 当然啦其中一个看起来挺柔软的生胸前抱着书籍很自豪的说我已经是级的光明牧师了哦 大风骤起站在最前面的我冷笑着看着敌人的冲阵剑锋向前一指喝道给我杀 顿时傲世狂人和傲世嗜血均是大惊失色忍不住道居然那么高的防御 阉池够来琶得够湍贪纪偬允http://p.baidu.com/ihome/center?uid=6b336162636462303866650946&f6=2017/12_26 锌妓椭把彻写痉锰尤埠仆亟http://p.baidu.com/ihome/center?

平向图问济须提标省子离

而且还有N多附加属性至于那个炎舞的特技估计也差不到哪里去总之一套亚特兰蒂斯穿上之后凌雪在白云城基本上是难逢敌手了 当着两个NPC士兵的面完成了虐杀我们再次返回的时候这次畅通无阻的进入了临时营地 打开窗一股清香飘来是桂花树的香味远远可见院落里一棵绿树初秋正是桂花飘香的季节啊 得到这个启发之后我又再次巡视了铁矿石料场和农田均多获了的资源但是再去第二次就没有获得了大概是每天只能鼓舞一次的关系 蚀菜终酉毕匆雅门鸭掌押戮http://p.baidu.com/ihome/center?uid=1865616

2017 NWERC

2017 NWERC Problem A. Ascending Photo 题目描述:给出一个序列,将其分成\(m\)份(不需要均等),使得将这\(m\)份重新排列后构成的是不下降序列,输出最小的\(m-1\). solution 待解决. Problem B. Boss Battle 题目描述:有环形的\(n\)根柱子,只有一根柱子后面有boss,每次向一根柱子投一个炸弹,炸弹波及范围为那根柱子和相邻的柱子,若boss在这三根柱子后面,则boss被炸死,若boss没有被炸死,则boss会选择原

Altair.HyperWorks.2017.2.Suite.Win64 13DVD

Siemens.Tecnomatix.CAD.Translators.5.1.2.Win64 1CD Tecplot.RS.2017.1.0.82356.Win64.&.Linux64 2CD Altium Designer 17.1.6 Build 538-ISO 1DVD Bentley.STAAD.Pro.Connect.Edition.v21.00.00.57 1CD CSS.Civil.Site.Design.v18.for.Civil3D.2012-2018 1CD Noesis.O

2017黑科技趋势最具看点的十大新品

腾讯数码讯(Human)作为一年一度的全球消费电子市场风向标,今年同样在拉斯维加斯举办的CES 2017消费电子展,依然吸引了一大批全球各个领域的厂商参展,从科技巨头到初创小团队.从传统汽车厂商再到家电企业,似乎所有能与科技沾边的公司都希望能在CES 2017上好好展示一次自己的风采. 其实每年的CES都有一些明星产品给我们留下深刻的印象,今年的也不例外.而这些明星产品不仅仅只是单单一款产品,更是代表了各自行业在进入到2017年之后的一个发展趋势和方向.而就将这样的变化能否成为未来的主流.或只是

2017考研英语:给作文模板增色的20句谚语

2017考研英语:给作文模板增色的20句谚语 2016-12-14 14:37:43 来源:新东方在线考研资料下载 靠谱名校专业课 最新资讯:2018考研复习要重点关注的6个月份 2018推免生考研必须了解的三件事 考研关注:过来人谈读研后的6大收获 英语单词背诵3大方法 18政治史纲各章节必背考点 精华推荐:名校学长学姐一对一考研答疑 向TA提问 [限额抢课]复试精华直播 课程推荐:2018考研签约全程联报 [政治+英语] 2018考研英数签约全程班 考研冲刺复习时间不多,大家作文背的咋样,模

老男孩教育每日一题-2017年5月11-基础知识点: linux系统中监听端口概念是什么?

1.题目 老男孩教育每日一题-2017年5月11-基础知识点:linux系统中监听端口概念是什么? 2.参考答案 监听端口的概念涉及到网络概念与TCP状态集转化概念,可能比较复杂不便理解,可以按照下图简单进行理解? 将整个服务器操作系统比喻作为一个别墅 服务器上的每一个网卡比作是别墅中每间房间 服务器网卡上配置的IP地址比喻作为房间中每个人 而房间里面人的耳朵就好比是监听的端口 当默认采用监听0.0.0.0地址时,表示房间中的每个人都竖起耳朵等待别墅外面的人呼唤当别墅外面的用户向房间1的人呼喊时