南阳理工学院16年个人积分赛第二场总结

Problem A    ZOJ 3860    Find the Spy

  水题,排一下序两两比较找出只出现过一次的数字就行了.第一发CE了...没注意看提交语言...还是太粗心...

AC 代码:

#include <cstring>
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <math.h>
#include <set>
#include <time.h>
#pragma comment(linker, "/STACK:102400000,102400000")
const int INF=0x3f3f3f3f;
using namespace std;
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int a[110];
        int n;
        scanf("%d",&n);
        for(int i=0; i<n; ++i)
            scanf("%d",&a[i]);
        sort(a,a+n);
        int ans=a[0];
        for(int i=1; i<n; ++i)
        {
            if(ans!=a[i])
            {
                if(i!=1)
                    ans=a[i];
                printf("%d\n",ans);
                break;
            }
        }
    }
    return 0;
}




Problem B    ZOJ 3861    Valid Pattern Lock

这道题的意思就是手机9宫格解锁的正确姿势0.0,在全排列的过程中判断一下就好了.

AC代码:

#include <cstring>
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <math.h>
#include <set>
using namespace std;
int lu[12][12];
void init()
{
    lu[1][3]=lu[3][1]=2;
    lu[1][7]=lu[7][1]=4;
    lu[1][9]=lu[9][1]=5;
    lu[2][8]=lu[8][2]=5;
    lu[3][7]=lu[7][3]=5;
    lu[3][9]=lu[9][3]=6;
    lu[4][6]=lu[6][4]=5;
    lu[7][9]=lu[9][7]=8;
}
int a[10];
bool pd[12];
bool anx[12];
int ans[1010000],l;
void dfs(int m,int n,int s)
{
    if(m==n)
    {
        ans[l++]=s;
        return ;
    }
    for(int i=0; i<n; ++i)
    {
        anx[0]=true;
        if(!pd[a[i]]&&anx[lu[s%10][a[i]]])
        {
            pd[a[i]]=true;
            anx[a[i]]=true;
            dfs(m+1,n,s*10+a[i]);
            pd[a[i]]=false;
            anx[a[i]]=false;
        }
    }
}
void print(int n)
{
    if(!n)
        return ;
    print(n/10);
    if(n>=10)
        printf(" %d",n%10);
    else printf("%d",n);
}
int main()
{
    init();
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n;
        scanf("%d",&n);
        for(int i=0; i<n; ++i)
            scanf("%d",&a[i]);
        sort(a,a+n);
        memset(pd,0,sizeof(pd));
        l=0;
        dfs(0,n,0);
        printf("%d\n",l);
        for(int i=0; i<l; ++i)
        {
            print(ans[i]);
            printf("\n");
        }
    }
    return 0;
}

Problem H    ZOJ 3867    Earthstone: Easy Version
炉石传说嘛.题目意思就是一个随从攻击另外一个随从,然后看看结果是怎样的,如果第一个随从的攻击力为0,就输出"Invalid",如果攻击过后有随从活着,那就输出该随从的攻击力和剩余血量,如果死了就输出"Discard". 0.0.好多人应该都是卡在题意上了...

AC代码:

#include <cstring>
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <math.h>
#include <set>
#include <time.h>
const int INF=0x3f3f3f3f;
using namespace std;
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int a1,a2,h1,h2;
        scanf("%d%d%d%d",&a1,&h1,&a2,&h2);
        if(!a1)
        {
            printf("Invalid\n");
        }
        else
        {
            if(h1<=a2)
                printf("Discard ");
            else printf("%d %d ",a1,h1-a2);
            if(h2<=a1)
                printf("Discard\n");
            else printf("%d %d\n",a2,h2-a1);
        }
    }
    return 0;
}

嗯...除了第一题其他都是一次就过...细心很重要!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值