现在的位置: 首页 > 综合 > 正文

20131003组队赛-Regionals 2012, South Pacific

2013年07月28日 ⁄ 综合 ⁄ 共 4956字 ⁄ 字号 评论关闭

A.  Decision Making

 

A题就是一句话的题目,比较str[len/2]和str[len/2-1]即可,不同NOT,反之DO

 

代码:

#include <iostream>
#include <cstdio>
#include <string>
#include <string.h>
#include <map>
#include <vector>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <queue>
#include <set>
#include <stack>
#include <functional>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <numeric>
#include <cassert>
#include <bitset>
#include <stack>
#include <ctime>
#include <list>
#define INF 0x7fffffff
#define max3(a,b,c) (max(a,b)>c?max(a,b):c)
#define min3(a,b,c) (min(a,b)<c?min(a,b):c)
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;

int QuickMod(int  a,int b,int n)
{
    int r = 1;
    while(b)
    {
        if(b&1)
            r = (r*a)%n;
        a = (a*a)%n;
        b >>= 1;
    }
    return r;
}

int main()
{
    string str;
    int n;
    scanf("%d", &n);
    while(n--)
    {
        cin >> str;
        int len = str.length();
        if(str[len/2] != str[len/2 - 1])
        printf("Do-it-Not\n");
        else
        printf("Do-it\n");
    }
    return 0;
}

B.  Log Books

 

这道题目我们做了好久,谔谔,题意出了问题。刚刚我又重新敲了一遍。就是给你白天和晚上飞行的时间。问你是否符合要求即可。就是判断区间的相交情况。按照night > sun的变换,统计飞行时间即可。尴尬

 

代码:

#include <iostream>
#include <cstdio>
#include <string>
#include <string.h>
#include <map>
#include <vector>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <queue>
#include <set>
#include <stack>
#include <functional>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <numeric>
#include <cassert>
#include <bitset>
#include <stack>
#include <ctime>
#include <list>
#define INF 0x7fffffff
#define max3(a,b,c) (max(a,b)>c?max(a,b):c)
#define min3(a,b,c) (min(a,b)<c?min(a,b):c)
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;

int QuickMod(int  a,int b,int n)
{
    int r = 1;
    while(b)
    {
        if(b&1)
            r = (r*a)%n;
        a = (a*a)%n;
        b >>= 1;
    }
    return r;
}
struct node
{
    int h;
    int m;
};
int cal(int x, int y)
{
    return x*60 + y;
}
int limit1 = 3000;
int limit2 = 600;
int main()
{
    int n;
    while(scanf("%d", &n) && n)
    {
        node sunup, sundown, flys, flye;
        int flag = 0;
        int SUMS = 0;
        for(int i = 0; i < n; ++i)
        {
            scanf("%d:%d%d:%d%d:%d%d:%d", &sunup.h, &sunup.m, &sundown.h, &sundown.m,
                  &flys.h, &flys.m, &flye.h, &flye.m);
            int sun = 0, night = 0;
            int tmp1 = cal(sunup.h, sunup.m);
            int tmp2 = cal(sundown.h, sundown.m);
            int tp1 = cal(flys.h, flys.m);
            int tp2 = cal(flye.h, flye.m);
            int time = tp2 - tp1;
            if(time > 120)
                flag = 1;

            if(tp2 < tmp1)
                night += (tp2 - tp2);
            else if(tp2 > tmp1 && tp2 <= tmp2 && tp1 <= tmp1)
            {
                sun += (tp2 - tmp1);
                night +=  (tmp1 - tp1);
            }
            else if(tp1 >= tmp1 && tp2 <= tmp2)
                sun += (tp2 - tp1);
            else if(tp1 <= tmp2 && tp1 >= tmp1 && tp2 >= tmp2)
            {
                sun += (tmp2 - tp1);
                night += (tp2 - tmp2);
            }
            else if(tp1 >= tmp2)
                sun += (tp2 - tp1);

            if(sun <= night)
            {
                night = tp2 - tp1;
                sun = 0;
            }
            SUMS += sun;
            SUMS += night;
        }
        if(flag == 1)
            printf("NON\n");
        else if(SUMS >= limit1)printf("PASS\n");
        else printf("NON\n");
    }

    return 0;
}

I.  Class Packing

 

I题就是贪心,因为当两个年纪的人数不相同的时候,限制要求是为人数少的为限制人数。所以我们就先满足低年级

人数的班数,如果不够就从上一年级借。这样一直借下去。对于六年级的就不用借了直接算就可以了。今天写晕了,

最后重写才过的尴尬:

 

代码:

#include <iostream>
#include <cstdio>
#include <string>
#include <string.h>
#include <map>
#include <vector>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <queue>
#include <set>
#include <stack>
#include <functional>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <numeric>
#include <cassert>
#include <bitset>
#include <stack>
#include <ctime>
#include <list>
#define INF 0x7fffffff
#define max3(a,b,c) (max(a,b)>c?max(a,b):c)
#define min3(a,b,c) (min(a,b)<c?min(a,b):c)
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;

int QuickMod(int  a,int b,int n)
{
    int r = 1;
    while(b)
    {
        if(b&1)
            r = (r*a)%n;
        a = (a*a)%n;
        b >>= 1;
    }
    return r;
}
struct node
{
    int con;
    int fp;
} num[7];
int main()
{
    while(scanf("%d%d%d%d%d%d%d", &num[0].con, &num[1].con, &num[2].con, &num[3].con, &num[4].con, &num[5].con, &num[6].con))
    {
        if(!num[0].con && !num[1].con && !num[2].con && !num[3].con && !num[4].con && !num[5].con && !num[6].con)break;
        num[0].fp = 20, num[1].fp = 20, num[2].fp = 20;
        num[3].fp = 25, num[4].fp = 25;
        num[5].fp = 30, num[6].fp = 30;
        int ans = 0;
        for(int i = 0; i < 7; ++i)
        {
            int tp1 = num[i].con, tp2 = num[i].fp;
            if(i < 6)
            {
                ans += (tp1 / tp2);
                if(tp1 % tp2)
                {
                    ans++;
                    int tp = tp1 % tp2;
                    num[i+1].con -= (tp2 - tp);
                    if(num[i+1].con < 0)
                        num[i+1].con = 0;
                }
            }
            else
            {
                ans += (tp1 / tp2);
                if(tp1 % tp2)
                ans++;
            }
        }
        printf("%d\n", ans);
    }
    return 0;
}

 

 J.  Esspe-Peasee

 

扩展欧几里德,求解A*x+B*y == C,给出A,B,C求出X+Y的最小值。谔谔以为贪心,欧几里德,还有那个格式需要注

意,1的时候是不需要加s的。这里估计会卡卡.

学习一个代码:

#include <iostream>
#include <cstdio>
#include <string>
#include <string.h>
#include <map>
#include <vector>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <queue>
#include <set>
#include <stack>
#include <functional>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <numeric>
#include <cassert>
#include <bitset>
#include <stack>
#include <ctime>
#include <list>
#define INF 0x7fffffff
#define max3(a,b,c) (max(a,b)>c?max(a,b):c)
#define min3(a,b,c) (min(a,b)<c?min(a,b):c)
#define mem(a,b) memset(a,b,sizeof(a))
#define LL long long

using namespace std;
LL gcd(LL a, LL b)
{
    return b == 0 ? a : gcd(b, a % b);
}
void kuozhan(LL a, LL b, LL &d, LL& x, LL& y)
{
    if(!b)
    {
        d = a;
        x = 1, y = 0;
    }
    else
    {
        kuozhan(b, a % b, d, y, x);
        y -= x*(a / b);
    }
}
int main()
{
    LL x, y, a, b, c, d, t;
    while(scanf("%lld%lld%lld", &a, &b, &c))
    {
        if(!a && !b && !c)
            break;
        LL g = gcd(a, b);
        if(c % g)
            cout << "Unquibable!" << endl;
        else
        {
            a /= g, b /= g, c /= g;
            kuozhan(a, b, d, x, y);
            t = c % b;
            x %= b, x = (x * t) % b, x = (x + b) % b, y = (c - (x * a)) / b;
            if(y < 0)
            {
                printf("Unquibable!\n");
                continue;
            }
            if(x == 1)
            {
                if(y == 1)printf("1 foom and 1 foob");
                else printf("1 foom and %lld foobs",y);
            }
            else
            {
                if(y == 1)printf("%lld fooms and 1 foob",x);
                else
                    printf("%lld fooms and ",x), printf("%lld foobs",y);
            }
            printf(" for a twob!\n");
        }
    }
    return 0;
}

 

 

抱歉!评论已关闭.