套题T8&T9

A – 8球胜负(eight)

(本文是从我的旧博客搬迁过来的)

Time
Limit:
1000MS     Memory Limit:65535KB     64bit IO Format:%lld
& %llu

难点地址:http://acm.timus.ru/problem.aspx?space=1&num=1258

Submit Status

  后天在天涯论坛看来那种在线测试的时候,有一种相见恨晚的痛感,于是随便选了一道感兴趣的题(No.1258:Pool)初叶做。为了准确领悟题的趣味,我把题翻译成中文了,那道题的规律和台球很相像(由于以前常玩可乐8,所以对台球的难题深感亲切)。但不精晓为啥出题人将台球难点说成了一个程序员撞墙的题目。下边是本身翻译后的,马耳他语不好,译错的地点请见谅。

Description

  

88球是一种台球比赛的条条框框。台面上有77个红球、77个黄球以及一个黑球,当然还有一个白球。对于大旨,我们应用如下的简化规则:红、黄两名健儿轮番用白球击打各自颜色的球,假使将该颜色的77个球全体打进,则那名选手能够打黑球,即使打进则算他胜。假设在打进自己颜色的所有球从前就把黑球打进,则算输。借使选手不慎打进了对手的球,入球如故有效。

问题:

现在付出打进的球(白球除外)的相继,以及黑球由哪方打进,你的天职是判断哪方是赢家。

 

假使不会有一杆同时打进一颗黑球和任何彩球。

1258. Pool

运作时刻限制: 1.0 秒
内存限制: 16 MB

上海葡京国际会所 1

 

在午休的时候,程序员Vasechkin喜欢在她的矩形房间里闲逛。他从他干活的地方伊始散步,直到她有了再起来工作的意念才平息。大家已知当Vasechkin撞墙时,他的移动规律万分符合“入射角等于反射角”定律。并且Vasechkin走的门径是很直的线条。凶残的办公室经理决定找出他荒废了有点时间在走走上。鲜明Vasechkin走过的长度除以他的平均速度(事先测量)可得出所用的年华。所以必须掌握那个尺寸!并且从Vasechkin的磕碰中能清楚的驾驭Vasechin的撞墙顺序。可能还有更简单的点子总计出程序员所浪费的光阴,不过办公室领导认为那是解决难题的特级方法。

Input

输入

首先行由七个整数W和D组成——他们各自是Vasechkin所在屋子的宽和长(0<=W,D<=1000,单位:米)。
其次行由Vasechkin的苗子地点绝对于左上角的坐标组成(0<X0<W,0<y0<D)。 
其三行是终极相对于左上角的坐标(0<x1<W,0<y1<D),
最终的第四行由字母L,R,F,B组成,每个字母分别代表Vasechkin撞墙的逐条——左,右,上,下。
撞墙的次数不当先1000.
这一个程序员永远不会撞在墙角,并且他的序幕地点不会贴在墙上。

输入包罗多组数据。每组数据第一行是一个整数NN(1≤N≤151≤N≤15),表示打进的球的个数,N=0N=0表示甘休。随后有一行,包蕴NN个字符,依序表示打进的是何种球。假使是BB,表示是红方打进的黑球,若是是LL,表示是黄方打进的黑球。要是是YY则象征是黄球,RR代表红球。字符间没有空格。

输出

Vasechkin从起源到终点所走的长短,保留小数点后四位。

富有输入都满意如下条件:最终一颗球打进时那局竞技正好截止,而且打进的红球和黑球都不当先77个。

例子

input output
            10 20
            9 1
            1 19
            FLRLRB
52.8015

 

出题人: Pavel Egorov
题来源: 二零零三年6月11日斯维尔德洛夫斯克州博士编程公开赛

==============================================================

粗略明白就是:给长宽,源点和终端,撞边的气象,最后求的是轨道的尺寸。
按下图,做协助图后,可以相比易于的根据勾股定理求出斜边。
上海葡京国际会所 2

X0,X1,Y0,Y1,W,D这个都是已知的,接下去就是分析碰撞顺序与那一个量的关系。

X方向的位移和Y方向的可以分别分析。
X方向的位移规律找出来了,Y方向的运动也是相同的。
不撞墙时:(X0-X1)^2和(X1-X0)^2是一样的,为了跟下边统一,所以把X0写在眼前
上海葡京国际会所 3

再分析一下周到的法则:
上海葡京国际会所 4

原理已经比较驾驭:
X0的全面规律——先往左的时候为正1,先往右的时候为负1。
X1的周全规律——碰撞次数为偶数的时候与X0周密异号,奇数时同号。
W的全面规律——R个数乘以2。

Y方向的法则也是那般。

剖析到此,已经可以在程序里面方便的贯彻那么些逻辑了。

上边是本身写的代码,若是依据科学格式输入,结果是合情合理的。
但不知底为啥,提交到ACM系统中报错,也不领悟不当是怎么,调试不了,我一度是豪情殆尽了。哪位情人一旦运行成功了仍旧发现错误了,一定要告知自己下。
有一个难点,题中必要结果保留4位小数,但自身没看出来是“四舍五入”仍然“直接舍去”,但本身二种都试了,都说答案有误。

下边是代码:

 1 using System;
 2 namespace ACM1258
 3 {
 4     class Program
 5     {
 6         static void Main()
 7         {
 8             System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;
 9             
10             double result;    //输出
11             double sideX, sideY;   //两个直角边
12             double X0,X1,Y0,Y1,W,D;   //各个参数
13             string flrb;    //撞墙顺序
14             int coeffX0=0,coeffX1=0,coeffY0=0,coeffY1=0,coeffW=0,coeffD=0;  //各个系数
15             bool checkLorR= true,checkForB= true;  //是否检查第一个LR、FB
16             bool LFirst= false,FFirst= false;      //判断第一个撞哪边
17             bool FBpair= true,LRpair=true;         //F与B、L与R的个数是否相等;
18 
19             string[] temp;
20             temp = Console.ReadLine().Split();               //[0]:W   [1]:D
21             W=Convert.ToDouble(temp[0]);
22             D=Convert.ToDouble(temp[1]);
23             temp = Console.ReadLine().Split();              //[0]:X0  [1]:Y0
24             X0=Convert.ToDouble(temp[0]);
25             Y0=Convert.ToDouble(temp[1]);
26             temp = Console.ReadLine().Split();               //[0]:X1  [1]:Y1
27             X1=Convert.ToDouble(temp[0]);
28             Y1=Convert.ToDouble(temp[1]);
29             flrb = Console.ReadLine();
30             
31             for (int i = 0; i < flrb.Length; i++)
32             {
33                 switch (flrb[i])
34                 {
35                     case 'F':
36                         if (checkForB)
37                         {
38                             FFirst = true;
39                             checkForB = false;
40                         }
41                         FBpair = !FBpair;
42                         break;
43                     case 'L':
44                         if (checkLorR)
45                         {
46                             LFirst = true;
47                             checkLorR = false;
48                         }
49                         LRpair = !LRpair;
50                         break;
51                     case 'R':
52                         if (checkLorR)
53                         {
54                             LFirst = false;
55                             checkLorR = false;
56                         }
57                         LRpair = !LRpair;
58                         coeffW++;
59                         break;
60                     case 'B':
61                         if (checkForB)
62                         {
63                             FFirst = false;
64                             checkForB = false;
65                         }
66                         FBpair = !FBpair;
67                         coeffD++;
68                         break;
69                     default:
70                         break;
71                 }
72             }
73 
74             coeffX0 = LFirst ? 1 : -1;
75             coeffX1 = LRpair ? -coeffX0 : coeffX0;
76             coeffY0 = FFirst ? 1 : -1;
77             coeffY1 = FBpair ? -coeffY0 : coeffY0;
78 
79             sideX = (coeffX0 * X0 + coeffX1 * X1) + coeffW * 2 * W;
80             sideY = (coeffY0 * Y0 + coeffY1 * Y1) + coeffD * 2 * D;
81             
82             result = Math.Sqrt(sideX*sideX+sideY*sideY);
83             //result = ((int)(result * 10000)) / 10000.0;   //这是直接舍去的,否则就是四舍五入
84             Console.WriteLine(result.ToString("F4"));
85         }
86     }
87 }

 

运作题中的测试用例结果:

上海葡京国际会所 5

Output

对每组数据,输出一行。即使红方胜,输出Red;黄方胜,输出Yellow

Sample Input


RYRRB 

RRRRYRRRB 
0

Sample Output

Yellow 
Red


上海葡京国际会所, 

上海葡京国际会所 6上海葡京国际会所 7

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 100
using namespace std;

int main()
{
    int n;
    char s[maxn];
    while(scanf("%d",&n) ,n) 
    {
        scanf("%s",s+1);
        int a=7,b=7;
        for(int i=1;i<=n;++i)
        {
            if(s[i]=='Y')--a;
            if(s[i]=='R')--b;
            if(s[i]=='B')
            {
                if(b)puts("Yellow");
                else puts("Red");
            }
            if(s[i]=='L')
            {
                if(a)puts("Red");
                else puts("Yellow");
            }
        }
    }

    return 0;
}

我好菜呀

 

 

//明明好简单的一道题结果智障居然WA了累累次感觉好丢人哇

//这一个故事告诉大家交题选语言的时候自然要留心……

//打代码的时候绝不手贱复制QAQ

//最终采用不改重写了 明明就是个暴力模拟QAQ


 

 

 

 

 

 

 


H – 卿学姐与诡谲村庄

Time
Limit:
1500MS     Memory Limit:65535KB     64bit IO Format:%lld
& %llu

Submit Status

Description

日复一日,三年五载,春去秋来。

卿学姐终于从天行廖那里结业啦。出山的卿学姐首先来到了一个怪异的村落。

在那一个村落中,只有三种人,一种是老实人,一种是坏人。

好人只说真话,坏人只说鬼话。

村庄虚伪的恬静由于卿学姐的赶来,终于被打破了。

人人开首互相指控,每个人都会说别的一个人是还是不是是好人。

卿学姐修行途中只学会了膜法,却不谙世事,所以卿学姐不能够认可哪些人是老实人,哪些人是禽兽。

不过机智的卿学姐意识到可以经过那么些人的控诉来分辨。

今昔报告你村庄中每个人指控何人是不是为好人,请问是或不是有个合理的分类可以契合所有的控诉。

Input

率先行一个整数NN,表示村庄总共有NN个人,村民从11起来编号到NN

1≤N≤1000001≤N≤100000

接下去NN行,每行多个整数,ai,tai,t,即便tt是11,那么注脚第ii私有认为第aiai私有是好人。如若tt是22,那么阐明第ii个体觉得第aiai民用是坏人。

1≤ai≤N1≤ai≤N

Output

借使存在一个好人坏人的归类可以满意所有的控诉,那么输出”Time to show my
power”,否则输出”One face meng bi”

Sample Input


2 2 
3 1 
1 2



2 2 
3 2 
1 2

 

Sample Output

Time to show my power


One face meng bi

 

Hint

率先组样例中,倘若1是好人,2和3都是禽兽,就能诠释得通那一个指控


a说b是坏人 那a是坏人b是老实人 a是好人b是坏人 也就是说a和b不是一类人

也就是说链上的率先民用是或不是好人 没有意思

唯有是否一类人 也就是说one face
mengbi的景观只有在环上自己又是老实人又是禽兽

接下来考虑每个点都有且只有一条出边 然后考虑每个点都有且唯有一条出边
所以答案只跟环有关 链直接扔掉

现今的题材成为处理环 绕一圈看看自己跟自己是否一类人 

不是的话一脸懵逼 是的话有解