[提姆(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
题来源: 二〇〇三年8月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的情况唯有在环上自己又是老实人又是禽兽

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

现今的题目成为处理环 绕一圈看看自己跟自己是还是不是一类人 

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