[提姆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
题来源: 二零零三年十月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

万一存在一个好人坏人的归类可以满意所有的控诉,那么输出”提姆(Tim)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的情状只有在环上自己又是好人又是禽兽

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

今昔的问题变成处理环 绕一圈看看自己跟自己是否一类人 

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