uva 467 - Synching Signals(暴力+数学)

题目连接:uva 467 - Synching Signals

题目大意:有n个红绿灯,给出红灯的时间t,那么该灯从0时刻开始就以2*t为周期绿黄红三灯交替,时间分别为t-5,5,t。问所这n个等从第一变为有一个灯不为绿灯开始,要多久才能变成所有的灯刚好都为绿灯。时间超过1小时输出unable to synch after one hour.

解题思路:一小时才3600秒,枚举秒数判断即可。

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
const int maxn = 1005;
const int maxd = 15;
const int INF = 0x3f3f3f3f;

char str[maxn];
int n, c[maxd];

inline bool isDight (char ch) {
    return ch >= ‘0‘ && ch <= ‘9‘;
}

void init () {
    n = 0;
    int num = 0, len = strlen(str);
    for (int i = 0; i <= len; i++) {
        if (isDight(str[i]))
            num = num * 10 + str[i] - ‘0‘;
        else {
            c[n++] = num;
            num = 0;
        }
    }
}

bool judge (int u) {
    for (int i = 0; i < n; i++) {
        int d = u % (2 * c[i]);

        if (d >= c[i] - 5)
            return false;
    }
    return true;
}

int main () {
    int cas = 1;
    while (gets(str) != NULL) {
        init();

        int s = INF;
        for (int i = 0; i < n; i++)
            s = min(s, c[i]);
        s -= 5;

        bool flag = true, t = true;
        for (int u = s+1; u <= 3600; u++) {

            if (t) {
                if (judge(u))
                    t = true;
                else
                    t = false;
            } else {
                if (judge(u)) {
                    flag = false;
                    printf("Set %d synchs again at %d minute(s) and %d second(s) after all turning green.\n", cas++, u/60, u%60);
                    break;
                }
            }
        }

        if (flag)
            printf("Set %d is unable to synch after one hour.\n", cas++);
    }
    return 0;
}

uva 467 - Synching Signals(暴力+数学),布布扣,bubuko.com

时间: 2024-12-20 11:40:48

uva 467 - Synching Signals(暴力+数学)的相关文章

UVA 467 - Synching Signals(数论)

UVA 467 - Synching Signals 题目链接 题意:给定几个红绿灯,每个红绿灯time表示,time秒红灯,time - 5秒绿灯, 5秒黄灯. 然后求全部灯变绿之后,在一次有灯变换之后,全是绿灯需要的时间 思路:由于只要算1小时,也就是3600秒,直接暴力过去,每次时间加上当前最小能变换灯的时间,然后记录一下每个灯的颜色状态,直到全变绿为止 代码: #include <stdio.h> #include <string.h> #include <algor

uva 618 - Doing Windows(暴力+数学)

题目链接:uva 618 - Doing Windows 题目大意:给出电脑桌面的大小W和H,现在在桌面上有4个窗口,给出窗口的初始大小,问说能不能通过调整各个窗口的大小(长宽比例不能变)使得4个屏幕刚好占满整个屏幕,并且互相不覆盖. 解题思路:其实可以直接暴力出所有情况,不过细节比较多,而且要考虑所有的细节. 我的做法的是先将4个窗口缩小至最小的状态,然后枚举左下角的窗口, 有四种可能 蓝色部分为另外枚举的窗口,3,4种情况要分别保证说长.宽相等,然后S部分就是子问题. 所以用一个二进制数来表

uva 10620 - A Flea on a Chessboard(暴力+数学)

题目链接:10620 - A Flea on a Chessboard 题目大意:在一个国际象棋的棋盘上,以左下角作为坐标轴建立坐标系,并且左下角的格子为黑色,每个格子边长为s.假定棋盘无限大,给定跳蚤的起始位置和方向,问这个苦逼的跳蚤能否跳到白格子. 解题思路:枚举前s*2步即可,因为2*2的格子形成了2白两黑的最小单位,边长为2*s,2*s步等于是跳回了相应的起始位置. #include <cstdio> #include <cstring> int s, x, y, dx,

uva 1069 - Always an integer(数学+暴力)

题目链接:uva 1069 - Always an integer 题目大意:给出一个多次多项式,问说是否对于任意正整数n来说结构均为整数. 解题思路:首先处理出字符串,然后枚举n从1到k+1判断即可,k为多项式中出现过的最大幂数指. P为多项式,d为除数,k为多项式中最大的次数 当k=0时,P中不存在n变量,所以直接计算判断即可 当k=1时,P是一次多项式,那么P(n+1)?P(n)=a,a为常数,也就是说P(i)为等差数列,如果首项P(1)和公差P(2)-P(1)为d的倍数即可,等价与判断P

uva 617- Nonstop Travel(暴力+数学)

题目链接:uva 617 - Nonstop Travel 题目大意:在一条路上有n个红绿灯,给出红绿灯的位置,以及绿灯,黄灯和红灯的时间,问现在以什么样的速度可以不同停止便通过这条路段.(速度只在30~60km/h) 解题思路:枚举速度,然后判断即可. 注意说黄灯也是可以过的,以及红绿灯的距离是以米为单位的. #include <cstdio> #include <cstring> const int N = 10; struct state { double dis; int

uva live 4123 Glenbow Museum 数学递推

// uva live 4123 Glenbow Museum 数学递推 // // 题目大意: // // 对于一个边平行于坐标轴的多边形,我们可以用一个序列来描述,R和O,R表示 // 该顶点的角度为90度,O表示该定点的角度为270.给定序列的长度.问能由这些RO序 // 列组成的星型多边形(内部存在一个点可以看到所有的节点的多边形)的方法数有多少. // // 解题思路: // // 顶点数一定是序列的长度.n小于4无法组成多边形.n为奇数的时候也不行.设R的个数有 // x个,O的个数

Uva 1069 Always an Integer ( 数学 )

Uva 1069 Always an Integer ( 数学 ) #include <cstdio> #include <cstring> #include <algorithm> #include <cctype> using namespace std; typedef long long LL; #define MAXN 105 #define CLR( a, b ) memset( a, b, sizeof(a) ) LL c[ MAXN ], d

uva 11490 - Just Another Problem(数学)

题目链接:uva 11490 - Just Another Problem 题目大意:有n个士兵,要排列成一个方阵,要求方阵尽量大,于是在方正的中间会空出两个正方形的区域,空出来的局域要求厚度相同,即正方形的四条边向相应方向均再有x行或者列. 解题思路:根据题意可以知道x(6x+7r)=n,x为厚度,r为正方形的边长.接着枚举x,x是n的因子. #include <cstdio> #include <cstring> #include <cmath> typedef l

uva 565 - Pizza Anyone?(暴力枚举 + 二进制)

题目:uva 565 - Pizza Anyone?(暴力枚举 + 二进制) 题目大意:题目是说有一个人要帮他的朋友们定批萨,然后每个朋友都有自己的口味要求,问能不能定一个批萨然后满足每个朋友的至少一个要求. 能就输出所定批萨里面加的东西,,输出要求按字典序: 不能就输出:No pizza can satisfy these requests. 解题思路:这题里面有16种材料,每种材料只有取与不取的可能,这样就有 2^16 种( 0 - 2^16 - 1),枚举出每种情况然后在分别看是否能满足每