SWUST大二周赛 之农夫山泉有点甜

原创 2015年11月21日 14:15:49

第一题:  codeforces 485b

题意:给定一些点,要用尽量小的正方形框住所有的点,输出矩形的大小。

解题思路:维护x的最大值和最小值。同理y。然后取差值中的最大值作为变成,注意用long long

代码:

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<math.h>
using namespace std;

#define ll long long
int main()
{
    int n;
    ll xmi,xma,ymi,yma;
    while(~scanf("%d",&n))
    {
        ll x,y;
        scanf("%lld%lld",&x,&y);
        xmi=x; xma=x; ymi=y; yma=y;
        while(--n)
        {
            scanf("%lld%lld",&x,&y);
            xmi=min(xmi,x);
            xma=max(xma,x);
            ymi=min(ymi,y);
            yma=max(yma,y);
        }
        ll ans=max(xma-xmi,yma-ymi);
        printf("%lld\n",ans*ans);
    }
    return 0;
}

第二题:UVA12627

题意:按照题目的规律 问第K天的时候,A到B行一共有多少个红色气球。

思路:先找规律,规律在于对于第k个小时的来说,总是可以分成右下角全是蓝色气球,右上角,左下角与左上角三个一模一样的k-1个小时的气球。这样的话,规律就很清晰了,然后用递归做比较方便。。。

代码:

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<queue>
#include<math.h>
using namespace std;

#define ll long long
ll f[33];
ll solve(ll x)
{
    if(x==0) return 0;
    ll z=1,sum=1;
    while(x>=z)
    {
        sum*=3;
        z*=2;
    }
    return sum/3+2*solve(x-z/2);
}

void init()
{
    int i;
    f[0]=1;
    for(int i=1;i<=30;i++)
        f[i]=f[i-1]*2;
}
int main()
{
    ll n,t,ans,k,a,b,num=0;
    scanf("%lld",&t);
    init();
    while(t--)
    {
        scanf("%lld%lld%lld",&k,&a,&b);
        num++;
        a=f[k]-a+1;
        b=f[k]-b+1;
        ans=solve(a)-solve(b-1);
        printf("Case %lld: %lld\n",num,ans);
    }
    return 0;
}

第三题:UVA11488

题意:给你一些01串,某个前缀的pg为:此前缀长度*拥有此前缀的串的数量。求最大的pg值。

思路:先建一颗字典树,按照输入的顺序插入到字典树,每个插入的字符进行统计,并记录深度,最后,枚举所有节点,计算出最大的pg值即可。

代码:

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<queue>
#include<math.h>
using namespace std;

#define ll long long
#define nn 500500
struct node
{
    int next[2];
    int num,len;
    void init()
    {
        memset(next,-1,sizeof(next));
        num=len=0;
    }
}tree[nn];
char s[220];
int tot,t,n;

void insert(char *s)
{
    int p=0;
    int l=strlen(s);
    int id;
    for(int i=0;i<l;i++)
    {
        id=s[i]-'0';
        if(tree[p].next[id]==-1)
        {
            tree[p].next[id]=t;
            tree[t].init();
            tree[t++].len=tree[p].len+1;
        }
        p=tree[p].next[id];
        tree[p].num++;
    }
}
int query()
{
    int ans=0;
    queue<int>q;
    q.push(0);
    while(!q.empty())
    {
        int x=q.front();
        q.pop();
        ans=max(ans,tree[x].num*tree[x].len);
        for(int i=0;i<2;i++)
        {
            if(tree[x].next[i]!=-1)
                q.push(tree[x].next[i]);
        }
    }
    return ans;
}
int main()
{
    scanf("%d",&tot);
    while(tot--)
    {
        scanf("%d",&n);
        t=0;
        tree[t++].init();
        for(int i=0;i<n;i++)
        {
            scanf("%s",s);
            insert(s);
        }
        int ans=query();
        printf("%d\n",ans);
    }
    return 0;
}

第四题:codeforces 495b

题意:给出a,b的值,找出满足a%x = b中x的个数。

思路:根据题意我们可以列出方程(a-b)%x == 0,我们只需枚举满足(a-b)%i == 0&&i> b的个数即可。

代码:

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<math.h>
using namespace std;

#define ll long long
int main()
{
    int a,b;
    while(~scanf("%d%d",&a,&b))
    {
        a-=b;
        if(a==0)
        {
            puts("infinity");
            continue;
        }
        int ans=0,i;
        for(i=1;i*i<a;i++)
        {
            if(a%i==0)
            {
                if(i>b) ans++;
                if(a/i>b) ans++;
            }
        }
        if(i*i==a && i>b) ans++;
        printf("%d\n",ans);
    }
    return 0;
}

第五题:codeforces 379a

题意:有a根蜡烛,每根能燃1小时,蜡烛灭了后剩下一个烛头,b个烛头可以组成一个新的蜡烛点燃蜡烛的最长的时间。

思路:。。。。这个就是纯暴力。

代码:

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<math.h>
using namespace std;

#define ll long long
int main()
{
    int a,b;
    while(~scanf("%d%d",&a,&b))
    {
        int ans=0,c=0;
        while(a>0||c>=b)
        {
            ans+=a;
            c+=a;
            a=c/b;
            c-=a*b;
        }
        printf("%d\n",ans);
    }
    return 0;
}





版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

关于农夫山泉的差异化营销分析

  • 2008年11月02日 12:37
  • 94KB
  • 下载

农夫山泉(数据范围是亮点)

Description 干净水一天去超市,看见了折扣价的农夫山泉。 众所周知,农夫山泉有许多不同的瓶子,不同的瓶子卖不同的价格。 超市里的农夫山泉正在折扣价促销,在一个大台子上整...
  • KenxHe
  • KenxHe
  • 2016年10月23日 21:42
  • 741

HDU-1200-To and Fro(Java农夫山泉+简单模拟)

To and Fro Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tot...

大二周赛之今天有点不开心(-。-;)

第一题:来源于POJ3690 题意:给出一个n * m的矩阵,矩阵中只有一些*或者0,n 解法:hash.把每一行连续的p个数hash成一个long long 的二进制数,就可减少判断的次数,当然也...

【缩点】SWUST 2014校赛 H:挖金子

 总时间限制: 1000ms 内存限制: 32768kB 描述 你在一个N*M的区域中,一开始在(1,1)的位置,每个位置有可能有金子,也有可能不能到达,也有可能有传送门。你只能往右或者下走...

二分_Mode(2016swust校赛)

Mode(1209) Time limit(ms): 2000 Memory limit(kb): 65535 Submission: 5 Accepted: 2 Accepted ...

扩展欧几里得___追风少年的坐骑(2016swust信息院赛)

Description     追风的少年基XX为了赶上风速,他亲自打造了一个坐骑,他的坐骑拥有土豪级别的两个键帽,分别为加速按钮和减速按钮。那么问题来了,他每按一次加速按钮,可以给他的坐骑...

字典树+DFS____字符矩阵(2015swust院赛)

给出一个n行,m列的方格矩阵,每个格子上有一个字母。  如果在方格中可以找到一条路径(任意起点),使其行走路线上的字母连起来可以组成字符串S  那么我们称字符串S在方格矩阵中。  其中路径应满足...

二周 项目2 有序的结构体数组

/* 烟台大学计算机学院学生 *All rights reserved. *文件名称: *作者:zhaojiaxiang *完成日期:2013年3月4日 *版本号:v1.0 *我的程序:...

SWUST成绩查询工具

  • 2011年05月06日 15:27
  • 2.15MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SWUST大二周赛 之农夫山泉有点甜
举报原因:
原因补充:

(最多只允许输入30个字)