CSU 1268 1268: Pingpang Balls(数学啊 )

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1268

Description

在双鱼的乒乓球上一般都会标有三星,二星,或者一星的字样,星级越高就表示球的质量越好。

星级的评定和球的重量,直径,硬度等很多因素有关,不过在这里,我们只考虑球的重量对星级评定产生的影响。

乒乓球有一个标准的重量S,如果球的重量和标准越接近,星级就会越高。具体来讲,对于球的重量和S的差的绝对值,如果小于或等于D1,那么这个球就会被标为三星,如果大于D1且小于或等于D2,那么就会被标为二星,如果大于D2且小于或等于D3就会被标为一星,如果大于D3则不对其标星(D1
< D2 < D3)。

现在给你N个乒乓球,你需要计算其中各个星级的乒乓球各有多少个。

Input

输入的第一行包含一个整数T (1 <= T <= 20),表示接下来一共有T组测试数据。

对于每组数据,第一行包含5个整数N
(1 <= N <= 10), S (1 <= S <= 20), D1, D2, D3 (1 <= D1 < D2 < D3 <= 20),含义同上。接下来一行包含N个不大于20的正整数,依次描述了各个乒乓球的重量。

Output

对于每组数据,用一行输出三个整数,中间用空格隔开,分别表示N个球中三星,二星和一星的球各有多少个。

Sample Input

2
5 10 1 2 3
6 7 9 9 10
6 10 1 2 3
11 12 12 13 14 8

Sample Output

3 0 1
1 3 1

HINT

Source

中南大学第七届大学生程序设计竞赛

代码如下:

#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
#include <iostream>
#include <string>
string ss;
int main()
{
    int n;
    int f[27];
    char s[10];
    while(~scanf("%d",&n))
    {
        memset(f,0,sizeof(f));
        memset(s,0,sizeof(s));
        char a, b;
        for(int i = 0; i < n; i++)
        {
            cin>>ss;
            if(ss == "print")
            {
                cin>>a;
                printf("%d\n",f[a-'a']);
            }
            else if(ss == "mov")
            {
                cin>>a>>b>>s;
                if(s[0]>='0' && s[0] <= '9')
                {
                    int num = 0;
                    int len = strlen(s);
                    for(int j = 0; j < len; j++)
                    {
                        num = num*10+s[j]-'0';
                    }
                    f[a-'a'] = num;
                }
                else
                    f[a-'a'] = f[s[0]-'a'];
            }
            else if(ss == "add")
            {
                cin>>a>>b>>s;
                if(s[0]>='0' && s[0] <= '9')
                {
                    int num = 0;
                    int len = strlen(s);
                    for(int j = 0; j < len; j++)
                    {
                        num = num*10+s[j]-'0';
                    }
                    f[a-'a'] += num;
                }
                else
                    f[a-'a'] += f[s[0]-'a'];
            }
            else if(ss == "sub")
            {
                cin>>a>>b>>s;
                if(s[0]>='0' && s[0] <= '9')
                {
                    int num = 0;
                    int len = strlen(s);
                    for(int j = 0; j < len; j++)
                    {
                        num = num*10+s[j]-'0';
                    }
                    f[a-'a'] -= num;
                }
                else
                    f[a-'a'] -= f[s[0]-'a'];
            }
        }
    }
    return 0;
}
时间: 2024-12-29 12:04:58

CSU 1268 1268: Pingpang Balls(数学啊 )的相关文章

CSU 1410: 整数转换(数学啊 )

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1410 Description 我们可以通过对一个整数A进行加1操作或者乘2操作使其转换为另一个整数B. 给出两个整数X, Y,计算至少需要多少步才能将X转换为Y.. Input 输入的第一行包含一个整数T (1 ≤ T ≤ 500),表示一共有T组测试数据. 每组测试数据占一行,包含两个整数X, Y (1 ≤ X ≤ Y ≤ 1018). Output 对于每组测试数据,输出至少需要多

CSU 1334: 好老师(数学啊 湖南省第九届大学生计算机程序设计竞赛)

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1334 Description 我想当一个好老师,所以我决定记住所有学生的名字.可是不久以后我就放弃了,因为学生太多了,根本记不住.但是我不能让我的学生发现这一点,否则会很没面子.所以每次要叫学生的名字时,我会引用离他最近的,我认得的学生.比如有10个学生: A ? ? D ? ? ? H ? ? 想叫每个学生时,具体的叫法是: 位置 叫法 1 A 2 right of A (A右边的同

URAL 1268. Little Chu 求最大原根

题目来源:URAL 1268. Little Chu 题意:输入n 求一个最大的k 使得k^1 k^2 k^3...k^x mod n 后各不相同 思路:mod n 后各不相同 最多有 n个 那么此事k就是原根 因为k <= n 所以从n开始向下枚举 求一个最大的原根 #include <cstdio> #include <cstring> using namespace std; typedef long long LL; int p[100000], c; LL pow_

hautoj 1268 小天使改名

1268: 小天使改名 时间限制: 2 秒  内存限制: 128 MB提交: 437  解决: 123提交 状态 题目描述 小天使的b站帐号被大家发现啦.于是小天使决定改名,将他原有ID中的两个不同位置的字母进行交换.(小天使有可能将两个不同位置的相同字母进行交换,虽然这样做他的ID并没有发生变化) Lsf知道小天使原来的ID,他想知道某个ID是否可能是小天使的新ID. 输入 第一行为数据组数T(T≤100).每组数据的第一行是字符串s1,(2≤length(s1)≤1000),为小天使的原始I

HTPJ 1268 GCD

链接: http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id/1268 题意: 给出n,m,定义f(t)=min |i/n−j/m+t| (i,j∈Z) .求f(t)的最大值 题解: i/n-j/m = (i*m - j*n) / (n*m),分子 = k*gcd(n,m).令d = gcd(n,m), 所以就是求 min |k*d / (n*m) +t| 的最大值,所以相邻两个结果之间的距离为d / (n*m), 要想让值最大

BNUOJ 1268 PIGS

PIGS Time Limit: 1000ms Memory Limit: 10000KB This problem will be judged on PKU. Original ID: 114964-bit integer IO format: %lld      Java class name: Main Mirko works on a pig farm that consists of M locked pig-houses and Mirko can't unlock any pig

hdu 4710 Balls Rearrangement (数学思维)

题意:就是  把编号从0-n的小球对应放进i%a编号的盒子里,然后又买了新盒子, 现在总共有b个盒子,Bob想把球装进i%b编号的盒子里.求重置的最小花费. 每次移动的花费为y - x ,即移动前后盒子编号的差值的绝对值. 算法: 题目就是要求                  先判断  n与  lcm(a,b)的大小,每一个周期存在循环,这样把区间缩短避免重复计算. 如果n>lcm(a,b)则   ans = (n/lcm)*solve(lcm)+solve(n%lcm) 否则   ans =

CCPC2017湘潭 1263 1264 1267 1268

1263 拉升一下就A了 #include <iostream> #include <vector> #include <algorithm> #include <queue> #define LL long long int using namespace std; int main() { cin.sync_with_stdio(false); int n,m,a,b; while(cin>>n>>m>>a>&g

51nod 1268 和为K的组合

1268 和为K的组合 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个正整数组成的数组A,求能否从中选出若干个,使他们的和为K.如果可以,输出:"Yes",否则输出"No". Input 第1行:2个数N, K, N为数组的长度, K为需要判断的和(2 <= N <= 20,1 <= K <= 10^9) 第2 - N + 1行:每行1个数,对应数组的元素A[i] (1 <= A[i] &l