从大到小排序,相邻两项作差,求gcd,如果K是gcd的倍数并且K<=max{a(i)},必然有解,否则无解. 可以自己手画画证明. #include<cstdio> #include<algorithm> using namespace std; int n,K,a[100010]; int main(){ scanf("%d%d",&n,&K); for(int i=1;i<=n;++i){ scanf("%d"…
只有两维的时候,我们显然要按照Ai-Bi排序,然后贪心选取. 现在,也将人按照Ai-Bi从小到大排序,一定存在一个整数K,左侧的K个人中,一定有Y个人取银币,K-Y个人取铜币: 右侧的X+Y+Z-K个人中,一定有X人取金币,Y+Z-K个人取铜币. 现在,简化一下,我们把每个人的金币数和银币数减去其铜币数,然后默认取上所有人的铜币,这样不影响最终答案. 于是我们依次枚举K,计算前K个人中,银币数之和最大的Y个人,后X+Y+Z-K个人中,金币数之和最大的X个人,然后求和,更新答案. 可以用堆轻松实现…
假设我们一开始选取所有的运动项目,然后每一轮将当前选择人数最多的运动项目从我们当前的项目集合中删除,尝试更新答案.容易发现只有这样答案才可能变优,如果不动当前选取人数最多的项目,答案就不可能变优. 我这最外面那个二分是卖萌的. #include<cstdio> #include<set> #include<cstring> #include<algorithm> using namespace std; typedef pair<int,int>…
题意 有n个问题答案为YES,m个问题答案为NO. 你只知道剩下的问题的答案分布情况. 问回答完N+M个问题,最优策略下的期望正确数. 解法 首先确定最优策略, 对于\(n<m\)的情况,肯定回答YES: 对于\(n>m\)的情况,肯定回答NO. 所以到最后,肯定由MIn(n,m)个问题可以回答正确. 最后可能正确的情况在于,n==m的情况,有一半的几率正确. 所以加上这部分的期望即可,通过组合数算出路径数目即可.…
题意 盒子里有n块砖,每块的颜色可能为蓝色或红色. 执行m次三步操作: 1.从盒子里随便拿走一块砖 2.放入一块蓝砖和红砖到盒子里 3.从盒子里随便拿走一块砖 给定n,m 问拿出来的砖,可能有多少种不同的颜色序列. n,m<=3000 解法 容易想到一个dp, 设f[i][j]表示已经执行了i次的操作,然后目前盒子里有j块蓝砖,和n-j块红砖. 共有四种转移,分别是一次操作拿走的砖头为红红.红蓝.蓝红.蓝蓝. 边界为f[0][0..n]=1 然后就会发现算重了, 这是因为不同的颜色序列可能会有不…
A - Getting Difference Time limit : 2sec / Memory limit : 256MB Score : 300 points Problem Statement There is a box containing N balls. The i-th ball has the integer Ai written on it. Snuke can perform the following operation any number of times: Tak…
点此进入比赛 \(A\):XOR Circle(点此看题面) 大致题意: 给你\(n\)个数,问是否能将它们摆成一个环,使得环上每个位置都是其相邻两个位置上值的异或值. 先不考虑\(0\),我们假设环上第一个数是\(a_1\),第二个数是\(a_2\),则第三个数\(a_3=a_1\ xor\ a_2\),第四个数\(a_4=a_2\ xor\ a_3=a_1\)... 以此类推,也就是说,一个合法的环上必然是\(a_1,a_2,a_1\ xor\ a_2\)三者重复. 整理一下,就是要满足:…
点此进入比赛 \(A\):><(点此看题面) 大致题意: 给你一个长度为\(n-1\).由\(<\)和\(>\)组成的的字符串,第\(i\)位的字符表示第\(i\)个数和第\(i+1\)个数的大小关系,求这个由非负整数组成的数组中元素和的最小值. 送分题都想了几分钟才做出来,真是退役预警...... 显然,对于所有小于两旁的数,我们给它赋值为\(0\),然后再从它们向两边扩展即可. #include<bits/stdc++.h> #define Tp template&…
点此进入比赛 \(A\):Connection and Disconnection(点此看题面) 大致题意: 给你一个字符串,将它重复\(k\)次.进行尽量少的操作,每次修改一个位置上的字符,使得不存在两个相邻位置上字符相同.求最少操作次数. 一个很\(naive\)的想法,就是将原串直接扫一遍,遇到与前一位相同的字符,就修改这一位字符为一个不存在的字符,并将计数器加\(1\).最后将计数器乘上\(k\). 然后,比较此时串首与串尾是否相同(注意是此时,因为上面操作中可能会修改串尾),如果相同,…
A - Getting Difference Time limit時間制限 : 2sec / Memory limitメモリ制限 : 256MB 配点 : 300 点 問題文 箱に N 個のボールが入っていて.i 番目のボールには整数 Ai が書かれています. すぬけ君は.次の操作を好きな回数だけ行うことができます. 箱から二つのボールを取り出し.その二つのボールに書かれている数の差の絶対値を書いた新しいボールと一緒に箱に戻す. すぬけ君が.整数 K の書かれたボールが箱の中に入っている状態にで…