博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
牛客练习赛43 F Tachibana Kanade Loves Game 容斥定理
阅读量:3904 次
发布时间:2019-05-23

本文共 898 字,大约阅读时间需要 2 分钟。

题目链接:

思路:

尽量选伤害对手而不伤害自己的武器,如果这些武器用完了,就选既伤害自己又伤害对手的武器。

选不伤害自己的武器其实就是选不是2,3...m的倍数,这其实可以进一步推出选不是2--m中的素数的倍数,因为每一个数都可以被表示成素数相乘。

找不是2-m中素数的倍数其实可以用n减去2-m素数的并集,这里就需要用容斥定理了。

可以通过dfs来取容斥定理所需要的集合,然后套用容斥定理公式即可。

还有几个优化:

(1)如果自身血量==0,则直接算输。

(2)如果自己的武器数小于敌人血量则算输。

求出总数sum之后,n-sum就是不伤害自己的总数。

如果n-sum>=k赢。

否则则需要伤害自己的武器补伤害,如果伤害不够或者补着补着自己就死了则算输。

否则算赢

代码如下:

#include 
using namespace std;typedef long long ll;int t;ll k,q,n,m;int su[15]={0,2,3,5,7,11,13,17,19};int vis[15];int re[15];ll sum;int r;void dfs(int loc,int nn,int nnum){ if(nnum==nn) { ll tsum=1; for (int i=0;i
n) { printf("QAQ\n"); continue; } r=0; for (int i=1;i<=8;i++) { if(m
=q) { printf("Yes\n"); continue; } q=q-(n-sum); if(sum

 

 

转载地址:http://ekoen.baihongyu.com/

你可能感兴趣的文章
浅析.NET中的Serialization
查看>>
Python Set
查看>>
python Dictionary
查看>>
[Python]随机数与随机字符串
查看>>
SWT 中实现最小化到托盘图标,并只能通过托盘的弹出菜单关闭程序
查看>>
Java Table Examples
查看>>
Java read file
查看>>
界面主线程,子线程更新主界面控件
查看>>
敲两遍引号键才出现
查看>>
动态制作svg介绍
查看>>
真TMD麻烦
查看>>
简单之极花费我n长时间的svg动画效果
查看>>
svg 文本换行
查看>>
svg 创建文本 create text
查看>>
svg viewbox
查看>>
故宫 台北故宫
查看>>
svg cursor appearance 指针形状
查看>>
在 SVG 中添加交互性
查看>>
The import javax.servlet cannot be resolved
查看>>
JAVA中extends 与implements有啥区别?
查看>>