[Codechef October Challenge 2014]刷漆

问题描述

Czy做完了所有的回答出了所有的询问,结果是,他因为脑力消耗过大而变得更虚了:)。帮助Czy恢复身材的艰巨任务落到了你的肩上。

正巧,你的花园里有一个由N块排成一条直线的木板组成的栅栏,木板从左到右依次标号1到N。这N块木板中,有M块木板前面放着一桶油漆。油漆有不同的颜色,每种颜色可以由一个大写字母表示(A到Z)。而你要求Czy用他的油漆刷子给栅栏刷上油漆。

已知Czy会选择一个前方放有油漆桶的木板开始他的任务。刷子蘸上油漆后,他开始随机地沿着栅栏走,他不会走出栅栏的范围。随机地走表示Czy会沿着他选择的方向一直走,然后随机在任何时候改变方向。沿着栅栏走只有两个方向,向前和向后。

你发现Czy刷油漆的过程总是符合下列规则:

  • 每个油漆桶里装着无限多的油漆;
  • 刷子上每次只有一种颜色的油漆,每次蘸油漆都会完全替换刷子上的油漆颜色;
  • 当Czy走到一个油漆桶前,他会首先用刷子蘸这个油漆桶里的油漆;
  • Czy每走过一个木板都会将这个木板刷成当前刷子上的油漆颜色。

已知木板可以被多次刷上油漆,每次都会完全覆盖之前的颜色。当所有木板都被刷上了油漆的时候,Czy才能停下来(当然他也可以继续刷到他想停下来为止)。你看着Czy在栅栏前来回舞动,突然想知道Czy停下来的时候栅栏有多少种可能的不同油漆方案。定义当至少有一块木板颜色不同时,两种油漆方案被视为是不同的。

请你输出不同的油漆方案数对109+9取模的值。

输入

输入文件为 paint.in。

输入的第一行包含两个整数N和M。

接下来M行,每行两个整数x和y,表示第y块木板前面有一个装着颜色为x的油漆的油漆桶。

输出

输出文件为 paint.out。

输出一行,包含一个整数,表示不同的油漆方案数对109 + 9取模的结果。

输入输出样例

 


paint.in


paint.out


6 2

A 2

B 6


4

数据范围

对于30% 的数据,1 ≤ M ≤ N ≤ 100。

对于100% 的数据, 1 ≤ M ≤ N ≤ 100000。

x是A到Z之间的大写字母;1 ≤ y ≤ N。

思路

  离线处理,按照坐标排序,方案数=方案数*所有颜色不同的油漆桶坐标之差。

const mo=1000000009;
type ss=record
    ch:char;nu:int64;
    end;
var a:array[0..100000] of ss;
    ans,n,m:int64;
    i:longint;
procedure sort(l,r: longint);
      var
         i,j,x: longint;y:ss;
      begin
         i:=l;
         j:=r;
         x:=a[(l+r) div 2].nu;
         repeat
           while a[i].nu<x do
            inc(i);
           while x<a[j].nu do
            dec(j);
           if not(i>j) then
             begin
                y:=a[i];
                a[i]:=a[j];
                a[j]:=y;
                inc(i);
                j:=j-1;
             end;
         until i>j;
         if l<j then
           sort(l,j);
         if i<r then
           sort(i,r);
      end;
begin
    readln(n,m);
    for i:=1 to m do
        readln(a[i].ch,a[i].nu);
    sort(1,m);
    ans:=1;
    for i:=1 to m-1 do
        if a[i].ch<>a[i+1].ch then
            ans:=ans*(abs(a[i+1].nu-a[i].nu))mod mo;
    if ans=0 then ans:=1;
    writeln(ans);
end.

时间: 2024-10-16 09:42:40

[Codechef October Challenge 2014]刷漆的相关文章

Codechef July Challenge 2014部分题解

Dish Owner(并查集) 链接:http://www.codechef.com/JULY14/problems/DISHOWN/ 题意分析:本题主要操作就是给出0 x y时,拥有第x道菜的厨师与拥有第y道菜的厨师pk,谁拥有的所有菜的其中一道菜(不一定是x或y)的分值比较高谁就获胜,并赢得loser的所有菜.即比较的是每个人分值最高的菜,所以对于非loser的人来说,他的分值最高的菜是不变的.综合题意用并查集易解. #include <cstdio> const int Maxn=100

Codechef October Challenge 2018 游记

Codechef October Challenge 2018 游记 CHSERVE - Chef and Serves 题目大意: 乒乓球比赛中,双方每累计得两分就会交换一次发球权. 不过,大厨和小厨用了另外一种规则:双方每累计得 K 分才会交换发球权.比赛开始时,由大厨发球. 给定大厨和小厨的当前得分(分别记为 P1 和 P2),请求出接下来由谁发球. 思路: \((P1+P2)\%K\)判断奇偶性即可. 代码链接 BITOBYT - Byte to Bit 题目大意: 在字节国里有三类居民

Maximum number, GCD condition (codechef March Challenge 2014)

题目 : http://acm.bnu.edu.cn/v3/problem_show.php?pid=40489 最近做到的一道蛮有意思的题目(codechef现在的题目确实很赞了) 题意 :中文题面 (cc的一大好处就是有中文翻译,嘿嘿) 区间Max = max{a_i|gcd(a_i, g) > 1 && x <= i <= y} 做法 : 一开始我是用分块做的,复杂的O(m * sqrt(n) * C) C 是所含不同素数的个数, C大概最大只有6或7吧 然后裸裸的

Codechef March Challenge 2014——The Street

The Street Problem Code: STREETTA https://www.codechef.com/problems/STREETTA Submit Tweet All submissions for this problem are available. Read problems statements in Mandarin Chineseand Russian. The String street is known as the busiest street in Cod

CodeChef November Challenge 2014

重点回忆下我觉得比较有意义的题目吧.水题就只贴代码了. Distinct Characters Subsequence 水. 代码: 1 #include <cstdio> 2 #include <iostream> 3 #include <map> 4 #include <cstring> 5 #include <cstdlib> 6 #include <cmath> 7 #include <algorithm> 8 #

Codechef December Challenge 2014 Chef and Apple Trees 水题

Chef and Apple Trees Chef loves to prepare delicious dishes. This time, Chef has decided to prepare a special dish for you, and needs to gather several apples to do so. Chef has N apple trees in his home garden. Each tree has a certain (non-zero) num

大有学问的刷漆小工具

在进行装修过程中占有相当重要的一部分--刷漆,因为墙面粉刷的结果会直接影响着整个家装的质量.要做到完美粉刷墙面当然少不了我们刷漆小工具,这些工具都有哪些呢?让我们一起来看看吧. 工具之一--需用滚筒刷墙面 又称滚筒,需搭配漆盘使用的滚筒刷,由于滚面范围广,所以是最省力.省时的刷具,尤其是接上延长杆后,可轻易粉刷墙面高处或天花板,但缺点是容易产生漆料喷溅的状况,所以滚筒刷的毛不要太短,但一定要细,这样刷出来的漆膜才会手感细腻. 滚筒刷分长毛,中毛.短毛三种,其表现为滚筒刷毛的长短,而不是滚筒本身的

防水刷漆小窍门

我们都知道墙面涂料的选择是家装中很重要的环节,只要选择一款好的墙面涂料进行刷漆,对于顺利进行过程有着不容忽视的作用. 1.墙面处理 一般装修墙面时首先要把普通基面处理平整,对于比较疏松的底材必须进行界面处理.预制板.板缝需专业密封处理后再进行施工.墙面比较大的孔洞以及裂缝应先用砂浆修补再用油漆处理.对这些小细节装修中万万不可忽视,而夏季装修更要关注混凝土的含水量,防止出现后期墙面气泡的现象. 2.底材处理 墙面基面处理完后,下面就是处理底材了.涂料均匀涂刷至底材,重新至少2次或多次,防水层厚度大

toastmasters(October 30, 2014)

October 30, 2014        19:00~21:00        Feishang Cafe Today I had only been there one hour, so I missed the Table Topics. I found that I could understand what they said in general. In the following Members' Speeches, I will try to retell one speak