喵哈哈村的狼人杀大战(4)

http://qscoj.cn/problem/33/

描述

喵哈哈村最近热衷于玩一个叫做狼人杀的游戏!

徐元帅同学今天他抽到的是女巫的身份,按照他的一贯玩法,他喜欢一开始就把自己毒死。

于是他早早的就出去了。

他很无聊,于是出了一道题给自己玩。

他从怀里面掏出了一个数字n。

他想知道有多少组三元组(a,b,c),满足a<=b<=c,且a,b,c都是素数,而且a+b+c=n。

输入

本题包含若干组测试数据。
每组测试数据只含有一个整数n。
1<=n<=10000

输出

输出三元组的数量。

样例输入1

3
9

样例输出1

0
2 一直在想着打表,但打表后依然TLE,哎算了,还是积累方法吧。
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int n,i,j,k,sum,a[1300],b[20000],c[20000];
int prime(int x)//判断一个数是否是素数
{
    int i,o;
    if(x==1 || x==4) return 1;
    if(x==2 || x==3) return 0;
    o=sqrt(x);
    for(i=2;i<=o;++i)
    {
        if(x%i==0) return 1;
        else if(i>=o) return 0;
    }
}
int main()
{
    int count=0;
    for(i=1;i<=10000;++i)
    {
        if(!prime(i)) a[count++]=i;
    }
    while(cin>>n)
    {
        k=0;
        memset(b,0,sizeof(b));
        memset(c,0,sizeof(c));
        for(i=0;i<count;i++)
        {
            if(n>a[i])
            {
                b[n-a[i]]++;//存对应a+b的值;
                c[n-a[i]]=a[i];//相当于存c;
            }
            else
            {
                break;
            }
        }
        for(i=0;i<count;i++)
        {
            for(j=i;j<count;j++)
            {
                sum=a[i]+a[j];
                if(a[j]<=c[sum])
                {
                    k=k+b[sum];//查表
                }
                else if(sum>n)
                {
                    break;
                }
            }
        }
        cout<<k<<endl;
    }
    return 0;
}

PS:相似题

Given S, a set of integers, ?nd the largest d such that a + b + c = d where a, b, c, and d are distinct elements of S.
Input Several S, each consisting of a line containing an integer 1 ≤ n ≤ 1000 indicating the number of elements in S, followed by the elements of S, one per line. Each element of S is a distinct integer between 536870912 and +536870911 inclusive. The last line of input contains ‘0’.
Output
For each S, a single line containing d, or a single line containing ‘no solution’.
Sample Input
5

2

3

5

7

12

5

2

16

64

256

1024

0
Sample Output
12

no solution

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    long long n,a[1010],m,sum,k,i,j,o;
    while(cin>>n)
    {
        o=0;
        if(!n) return 0;
        for(i=0;i<n;i++)
            cin>>a[i];
        sort(a,a+n);
        for(i=n-1;i>=0;i--)
        {
            for(j=n-1;j>=0;j--)
            {
                sum=a[i]-a[j];
                if(j==i) continue;
                m=0;
                k=j-1;
                while(m<k)
                {
                    if(a[m]+a[k]==sum)
                    {
                        o=1;
                        cout<<a[i]<<endl;
                        break;
                    }
                    else if(a[m]+a[k]>sum)
                        k--;
                    else m++;
                }
                if(o==1) break;
            }
            if(o==1) break;
        }
        if(o==0) cout<<"no solution"<<endl;
    }
    return 0;
}

时间: 2024-08-05 23:11:45

喵哈哈村的狼人杀大战(4)的相关文章

qscoj 喵哈哈村的魔法考试 Round #5 (Div.2) 题解(前1,2,3题)ps:前三题在本人水平可掌控范围之内

题目链接:http://qscoj.cn/problem/30/ 第一题 喵哈哈村的狼人杀大战(1) 时间限制: 1000ms   内存限制: 128M 描述 喵哈哈村最近热衷于玩一个叫做狼人杀的游戏! 张小田今天她抽到的是民的身份,按照她的一贯玩法,她不会考虑发言者的发言,她只考虑站队情况. 现在是警上竞选的投票环节,现在只剩下还能当警长的两个真假预言家. 张小田认为,如果在某一天,有连续坐在一起的k个人投票给同一个人的话,那么她就认为这一局可能比较危险. 投给第一个预言家的,就记为0,投给第

喵哈哈村与哗啦啦村的大战

链接:http://qscoj.cn/problem/57/ 喵哈哈村与哗啦啦村的大战(一) 发布时间: 2017年3月28日 20:03   最后更新: 2017年3月28日 20:04   时间限制: 1000ms   内存限制: 128M 描述 喵哈哈村因为和哗啦啦村争夺稀有的水晶资源,展开了激烈的战斗! 喵哈哈村里面有n个战士,这些战士每个人一开始拥有a[i]的战斗力,现在每个战士可以被艾尔之光强化三次,每次强化有p的概率增加一点战斗力,反之会有(1-p)的概率降低一点战斗力,当然战斗力

喵哈哈村的魔法考试 Round #10 (Div.2) A

喵哈哈村与哗啦啦村的大战(一) 发布时间: 2017年3月27日 09:13   时间限制: 1000ms   内存限制: 128M 描述 喵哈哈村因为和哗啦啦村争夺稀有的水晶资源,展开了激烈的战斗! 喵哈哈村里面有n个战士,这些战士每个人一开始拥有a[i]的战斗力,现在每个战士可以被艾尔之光强化三次,每次强化有p的概率增加一点战斗力,反之会有(1-p)的概率降低一点战斗力,当然战斗力不可能降为负数. 现在问题来了,对于喵哈哈村的n个战士,他们强化三次之后,战斗力最高可以到达多少呢?最少可以到达

喵哈哈村的魔法考试 Round #10 (Div.2) B

喵哈哈村与哗啦啦村的大战(二) 发布时间: 2017年3月27日 09:25   时间限制: 1000ms   内存限制: 128M 描述 喵哈哈村因为和哗啦啦村争夺稀有的水晶资源,展开了激烈的战斗. 喵哈哈村与哗啦啦村战斗的地图可以视为一个二维平面. 喵哈哈村准备修建n个防御工事,唯一的要求就是任意两个防御工事之间的距离不得大于R. 在喵哈哈村修建完防御工事之后,哗啦啦村准备选择一个防御工事进行攻击,这个防御工事包括离被攻击防御工事距离小于等于r的防御工事都将被摧毁.其中:R*R=2*r*r.

2017-5-20-Train: 喵哈哈村的魔法考试 Round #17 (Div.2)

A.喵哈哈村的秘境探险(数学) 描述 喵哈哈村的一堆人在前往北京的路上,发现了一个洞穴.由于好奇心大作,于是准备前往洞穴进行探险. 但是有一些人并不愿意前往洞穴,于是他们决定玩以下游戏,来看是否能够去秘境探险: 这儿有n个数,如果所有数的乘积是k的倍数,那么就去探险,否则就不去. 现在问你是否会去. 输入 本题包含若干组测试数据.第一行两个整数n,k,表示数的个数,和k.第二行n个整数,a[i].满足1<=n<=1000,1<=k,a[i]<=1e6 输出 如果要去的话,输出Yes

qscoj 128 喵哈哈村的魔法源泉(2)(模仿快速幂,好题)

喵哈哈村的魔法源泉(2) 发布时间: 2017年5月9日 20:59   最后更新: 2017年5月9日 21:00   时间限制: 1000ms   内存限制: 128M 描述 喵哈哈村有一个魔法源泉,里面有无穷无尽的力量. 但是前提是你能答出这样一个问题: 给你a,b,p,让你输出a*b%p的值. 输入 本题包含若干组测试数据.第一行三个整数a,b,p. 满足:0<=a,b,p<=1e18 输出 输出答案 样例输入1 复制 10 1 7 样例输出1 3题目链接:http://qscoj.c

喵哈哈村的魔法考试 Round #7 (Div.2) B

  B 喵哈哈村的麦克雷  喵哈哈村的麦克雷 发布时间: 2017年3月13日 11:51   最后更新: 2017年3月14日 18:16   时间限制: 1000ms   内存限制: 128M 描述 为了拯救喵哈哈村,这个世界必须要存在英雄. 一名叫做麦克雷的英雄站了出来!他现在面临一个难题: 给定一个N x M的01矩阵,其中1表示陆地,0表示水域.对于每一个位置,求出它距离最近的水域的距离是多少. 矩阵中每个位置与它上下左右相邻的格子距离为1. 输入 本题包含若干组测试数据:第一行包含两

喵哈哈村的括号序列

描述 喵哈哈村的括号序列和外界的括号序列实际上是一样的. 众所周知"()"这样的,就是一个标准的括号序列:"()()()()"这样也是括号序列:"((()))()"这样也是一个合法的括号序列.但是"((("这样,就不是一个合法的括号序列了. 现在沈宝宝非常好奇,给你一个字符串,请从中找出最长的合法括号序列出来. 不知道你能找到吗? 输入 第一行一个T,表示有T组数据.接下来T行,每一行都是一个字符串.保证字符串的长度小于100

喵哈哈村的魔法考试 Round #3 (Div.2) ABCDE

官方题解:http://www.cnblogs.com/qscqesze/p/6480284.html 哗啦啦村的刁难(1) 描述 哗啦啦村作为喵哈哈村的对头,于是他们准备给喵哈哈村一个好看. 哗啦啦村的头号长老--鱼先生,就提出了以下问题: 给你三个木棍,问你这三个木棍,是否能够组成一个非退化的三角形! 输入 第一行一个整数T,表示测试组数的个数.接下来T行,每行三个整数,a,b,c.表示哗啦啦村提供的三根木棍. 满足1<=T<=1001<=a,b,c<=5000 输出 如果可以