[提姆(Tim)usACM][1258]程序员撞墙的题目大红鹰葡京娱乐中心

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
题来源: 二〇〇三年2月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

若果存在一个好人坏人的分类能够满意所有的控诉,那么输出”提姆e 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的情事只有在环上自己又是好人又是坏人

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

近年来的题目成为处理环 绕一圈看看自己跟自己是或不是一类人 

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