zoj 3757&&3758

本文详细介绍了如何通过优化算法解决一个包含复杂模拟问题和大素数判定的挑战。通过深入分析并应用高效的数据结构和算法策略,文章提供了从输入解析到输出生成的完整解决方案,确保了程序的正确性和性能。对于需要处理大量数据或复杂逻辑场景的开发者,此方法提供了一种实用且高效的解决路径。

3757一个模拟题,简单,但容易错;

3758 大素数判定就行;

#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 100009
using namespace std;

int ans[3];
int hit[maxn];
int in[maxn];
int ball[maxn];
bool vis[maxn];

int main()
{
    int n,m;
    int p,q;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        ans[0]=0;
        ans[1]=0;
        memset(vis,0,sizeof vis);
        for(int i=0; i<n; i++)
            scanf("%d",&ball[i]);
        sort(ball,ball+n);
        int ma1=-1;
        int sumofin=0;
        int tar=0;
        int turn=0;
        for(int i=0; i<m; i++)
        {
            bool flag1=0,flag2=0,flag3=0;
            for(tar; tar<n; tar++)
                if(vis[ball[tar]]==0)
                    break;
            ma1=0;
            sumofin=0;
            scanf("%d",&p);
            for(int i=0; i<p; i++)
            {
                scanf("%d",&hit[i]);
                if(hit[i]>ma1)ma1=hit[i];
                if(hit[i]==ball[tar]&&p==1) flag1=1;//只击中目标球;
            }
            scanf("%d",&q);
            for(int i=0; i<q; i++)
            {
                scanf("%d",&in[i]);
                sumofin+=in[i];
                vis[in[i]]=1;
                if(in[i]==ball[tar])flag2=1;//目标球进了;
                if(in[i]==0)flag3=1;//白球进了;
            }
            if(p==0)
            {
                turn=1-turn;
                ans[turn]+=ball[tar];
            }
            else
            {
                if(flag3==0&&flag1==0)
                {
                    turn=1-turn;
                    ans[turn]+=ma1;
                    ans[turn]+=sumofin;
                }
                else if(flag3&&p)
                {
                    turn=1-turn;
                    ans[turn]+=ma1;
                    ans[turn]+=sumofin;
                }
                else if(flag2==0)
                {
                    turn=1-turn;
                    ans[turn]+=sumofin;
                }
                else
                {
                    ans[turn]+=sumofin;
                }
            }
        }
        printf("%d : %d\n",ans[0],ans[1]);
    }
    return 0;
}
View Code

 

转载于:https://www.cnblogs.com/yours1103/p/3577510.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值