2016ACM/ICPC亚洲区大连站-补题


5971-Wrestling Match

题目隐藏条件:除去已经知道的好人和坏人,如果剩余的人恰好被分成两组,即便不知道这两组哪组是好人,也是输出YES

做法:dfs染色,如果没有起点,需要随意取一个起点并随机赋予颜色(这个起点只能取一个)

代码

const int maxn=2e3+7;
const int INF=0x3f3f3f3f;
const ll INFF=1e18;
int n,m,x,y,u,v,col[maxn],flag;
vector<int> G[maxn];
void dfs(int x)
{repp(i,0,G[x].size()){int v=G[x][i];if (col[v]!=-1){if (col[v]!=1-col[x])flag=0;}else{col[v]=1-col[x];dfs(v);}}
}
int main()
{while(~scanf("%d%d%d%d",&n,&m,&x,&y)){flag=1;rep(i,1,n)col[i]=-1,G[i].clear();rep(i,1,m){scanf("%d%d",&u,&v);G[u].pb(v);G[v].pb(u);}rep(i,1,x)scanf("%d",&u),col[u]=1;rep(i,1,y)scanf("%d",&u),col[u]=0;rep(i,1,n)if (col[i]!=-1)dfs(i);rep(i,1,n){if (col[i]==-1){col[i]=0;dfs(i);break;}}rep(i,1,n)if (col[i]==-1)flag=0;if (flag)printf("YES\n");else printf("NO\n");    }return 0;
}



5974-A Simple Math Problem

做法
假设x=p1a1p2a2...pnanx=p_1^{a_1}p_2^{a_2}...p_n^{a_n}x=p1a1​​p2a2​​...pnan​​
y=p2b2p3b3...pmbmy=p_2^{b_2}p_3^{b_3}...p_m^{b_m}y=p2b2​​p3b3​​...pmbm​​
则gcd(x,y)=p2min(a2,b2)gcd(x,y)=p_2^{min(a_2,b_2)}gcd(x,y)=p2min(a2​,b2​)​
x+y=ax+y=ax+y=a
xygcd(x,y)=b{xy\over gcd(x,y)}=bgcd(x,y)xy​=b

对于aaa:min(a2,b2)≤p2min(a_2,b_2)\leq p_2min(a2​,b2​)≤p2​的次方
对于bbb:min(a2,b2)=p2min(a_2,b_2)= p_2min(a2​,b2​)=p2​的次方
故gcd(a,b)=gcd(x,y)=p2min(a2,b2)gcd(a,b)=gcd(x,y)=p_2^{min(a_2,b_2)}gcd(a,b)=gcd(x,y)=p2min(a2​,b2​)​

解一个一元二次方程即可
PS:这题目比较SB,输出答案必须小的在前大的在后

代码

const int maxn=2e6+7;
const int INF=0x3f3f3f3f;
const ll INFF=1e18;
ll a,b,g,dt,x,x1,x2,y1,y2;
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
int main()
{while(~scanf("%lld%lld",&a,&b)){g=gcd(a,b);dt=a*a-4*b*g;x=sqrt(dt);if (dt<0||x*x!=dt){printf("No Solution\n");continue;}x1=(a+x)/2;x2=(a-x)/2;y1=a-x1;y2=a-x2;if (x1*y1==b*g&&(a+x)%2==0)printf("%lld %lld\n",min(x1,y1),max(x1,y1));else if (x2*y2==b*g&&(a-x)%2==0)printf("%lld %lld\n",min(x2,y2),max(x2,y2));else printf("No Solution\n");}return 0;
}



5976-Detachment

做法
1.瞎列几组数据,发现尽可能的把数字拆的越多越好(除了拆成1之外)
2.拆出来的越平均越好

那么假设拆成2,3,4,…n的序列
根据平均的思想,将多余的数字均分给较大的数,从右往左分(贪心)

用乘法前缀和二分即可

证明不会,借鉴别人的博客

https://blog.csdn.net/qq_34374664/article/details/53466435

代码

const int maxn=2e6+7;
const int INF=0x3f3f3f3f;
const ll INFF=1e18;
const ll mod=1e9+7;
ll t,x,sum[maxn],mul[maxn],ans;
ll qpow(ll a,ll b){ll res=1;while(b){if (b&1)res=res*a%mod;a=a*a%mod;b>>=1;}return res;}
ll pre(ll l,ll r){return mul[r-1]*qpow(mul[l-2],mod-2)%mod;}
int main()
{sum[0]=0;mul[0]=1;for (int i=1;i<=100000;i++){sum[i]=sum[i-1]+(i+1);mul[i]=mul[i-1]*(i+1)%mod;}scanf("%lld",&t);while(t--){scanf("%lld",&x);if (x<=4){WW(x);continue;}ll pos=upper_bound(sum+1,sum+1+100000,x)-sum-1;ll res=x-sum[pos];if (res==pos+1)ans=pre(3,pos+1)*(pos+3)%mod;else ans=pre(2,pos-res+1)*pre(pos-res+3,pos+2)%mod;WW(ans);}return 0;
}



5978-To begin or not to begin

做法:假设一共有iii个球(一个为红球)
dp1[i]dp1[i]dp1[i]表示先手赢的概率,dp2[i]dp2[i]dp2[i]表示后手赢的概率

那么可以得到以下关系式:
dp1[i]+dp2[i]=1dp1[i]+dp2[i]=1dp1[i]+dp2[i]=1
dp2[i]=1i∗0+i−1idp1[i−1]dp2[i]= {1\over i}*0+{i-1\over i}dp1[i-1]dp2[i]=i1​∗0+ii−1​dp1[i−1]
dp1[1]=1dp1[1]=1dp1[1]=1,dp2[1]=0dp2[1]=0dp2[1]=0

递推式和第一项有了 直接O(k)解

代码

const int maxn=2e6+7;
const int INF=0x3f3f3f3f;
const ll INFF=1e18;
const double eps=1e-7;
int k;
double dp1[maxn],dp2[maxn];
int main()
{dp1[1]=1.0;dp2[1]=0.0;for (double i=2;100000-i>eps;i+=1.0){dp2[int(i)]=(i-1)/i*(dp1[int(i)-1]);dp1[int(i)]=1-dp2[int(i)];}while(~scanf("%d",&k)){if (fabs(dp1[k+1]-dp2[k+1])<eps)W(0);else if (dp1[k+1]>dp2[k+1])W(1);else W(2);}return 0;
}



5979-Convex

SB题
三角函数算面积




5980-Find Small A

SB题

2016ACM/ICPC亚洲区大连站-补题相关推荐

  1. 2016ACM/ICPC亚洲区大连站现场赛题解报告(转)

    http://blog.csdn.net/queuelovestack/article/details/53055418 下午重现了一下大连赛区的比赛,感觉有点神奇,重现时居然改了现场赛的数据范围,原 ...

  2. 2016ACM/ICPC亚洲区大连站现场赛题解报告

    此文章可以使用目录功能哟↑(点击上方[+]) 下午重现了一下大连赛区的比赛,感觉有点神奇,重现时居然改了现场赛的数据范围,原本过的人数比较多的题结果重现过的变少了,而原本现场赛全场过的人最少的题重现做 ...

  3. 2016ACM/ICPC亚洲区大连站题解

    以下所有AC题解程序来自"仙客传奇"团队. AC题数:10/11 ABCDFHIJK A. Wrestling Match AC的C++语言程序: #include <ios ...

  4. 【2016ACM/ICPC亚洲区大连站C】HDU - 5973 Game of Taking Stones 威佐夫博弈

    题意 给你两个石堆的石头数量,两个人轮流拿,两人轮流从任意一堆取至少一个或者从两堆取同样多的物品.问你先手获胜还是后手胜. http://acm.hdu.edu.cn/showproblem.php? ...

  5. 2016ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学)

    目录 A Thickest Burger B Relative atomic mass C Recursive sequence · 矩阵快速幂 E Counting Cliques · 暴力 H G ...

  6. 2014ACM/ICPC亚洲区西安站 F题 color (组合数学,容斥原理)

    题目链接:传送门 题意: n个格子排成一行.我们有m种颜色.能够给这些格子涂色,保证相邻的格子的颜色不同 问,最后恰好使用了k种颜色的方案数. 分析: 看完题目描写叙述之后立刻想到了一个公式 :C(m ...

  7. HDU 5952 Counting Cliques(2016ACM/ICPC亚洲区沈阳站-重现赛)

    题目分析 这道题看样子没有什么办法,主要就是有策略的暴力,因为每个点连接的点不超过20个,那么就可以直接进行暴力,但是这样会有很多重复,因此需要剪枝,具体情况就是每次搜过一个点之后就把这个点连接的所有 ...

  8. HDU6218 2017ACM/ICPC亚洲区沈阳站 Bridge(Set,线段树)

    HDU6218 2017ACM/ICPC亚洲区沈阳站 Bridge Solution 我们考虑维护在环上的边的个数,答案就是总边数减去环上边数. 环的形态是这样的:(0,l),(0,l+1)...(0 ...

  9. 2016 ACM/ICPC亚洲区青岛站现场赛(部分题解)

    摘要 本文主要列举并求解了2016 ACM/ICPC亚洲区青岛站现场赛的部分真题,着重介绍了各个题目的解题思路,结合详细的AC代码,意在熟悉青岛赛区的出题策略,以备战2018青岛站现场赛. HDU 5 ...

最新文章

  1. Google Colab 使用教程(1)
  2. latex hyperref_LaTeX 使用心得
  3. JavaScript 易错知识点整理
  4. MongoDB基本命令总结
  5. 从零入门 Serverless | 一文详解 Serverless 架构模式
  6. Postman获取App端接口
  7. 热闹庆祝51CTO第二期线下活动圆满完成
  8. 当检测到运动时如何自动打开门灯
  9. ros 三线负载均衡
  10. python海龟绘图颜色_海龟绘图
  11. 亲测有效win10系统QQ音乐无法安装
  12. 百度离线地图APIV2.0
  13. python pil grab screen
  14. QT人机交互(动态界面)
  15. virbr0怎么关闭_kvm虚拟化关闭虚拟网卡virbr0的方法
  16. 多余的读写端口什么时候会对程序造成影响_RFID叉车仓储|RFID叉车读写器在智能仓库收发货环节中的应用...
  17. WordPress插件教程-WPS Hide Login更改后台登录地址
  18. MatLab专用变量
  19. MobileNet_ssd原理
  20. 新唐芯片学习笔记——概要

热门文章

  1. mysql lag over_数据库sql 使用 lag 和OVER 函数和 like 使用 小技巧
  2. 第9周测验-鸣人和佐助
  3. android 地图相册,时光地图相册app下载-时光地图相册下载v1.0.2 安卓版-西西软件下载...
  4. thinksnsv4.6运行php,ThinkSNS开启调试模式
  5. 太空射击python
  6. android打开hex文件怎么打开,hex文件怎么打开
  7. Java程序练习-潜伏者
  8. iOS 应用内跳转到百度地图、苹果地图、谷歌地图、高德地图等
  9. Python 绘制隐函数图像
  10. 王半仙儿的日记-0013