摘要:
给出一组数据,最大值为left,和为right。在[left,right]区间进行二分!!!代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #define ll __int64 9 #define pi acos(-1.0)10 #define MAX 5000011 using namespace std;12 int an[100005];13 int main(){14 int n,m,i,sum,left,right=0,mid,t;15 while(c... 阅读全文
摘要:
首先来看一下Sample里的第一组数据。1 2 2 1 2经过一次变换之后就成了5 5 5 5 4它的原理就是a0 a1 a2 a3 a4->(a4+a0+a1) (a0+a1+a2) (a1+a2+a3) (a2+a3+a4) (a3+a4+a0)如果用矩阵相乘来描述,那就可以表述为1xN和NxN的矩阵相乘,结果仍为1xN矩阵a = 1 2 2 1 2 b = 1 1 0 0 11 1 1 0 00 1 1 1 00 0 1 1 11 0 0 1 1a * b = 5 5 5 5 4所以最终结果就是:a * (b^k)线性代数不合格的同鞋表示压力很大。。对一个NxN矩阵求k次方,而且这 阅读全文
摘要:
2个星球周期为a,b。则相差半周的长度为a*b/(2*abs(a-b)),对于n个只需求这n个分数的最小公倍数即可!公式:分数的最小公倍数 = 分子的最小公倍数/分母的最大公约数由于涉及到大数所以用java写的方便! 1 import java.math.*; 2 import java.util.*; 3 4 public class Main { 5 public static void main(String arg[]){ 6 Scanner cin = new Scanner(System.in); 7 int n = cin.nextInt... 阅读全文
摘要:
由于k的范围是0-2^31,而且x,y,z都是正整数,由题易知道2#include#include#include#include#include#include#include#define ll __int64#define pi acos(-1.0)#define MAX 50000using namespace std;ll pows(ll a,ll b){ ll ans=1; while(b){ if(b&1) ans*=a; b>>=1; a*=a; } return ans;}int main(){ int... 阅读全文
摘要:
置换群就可以搞定!!!注意下格式就好了…… 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #define ll __int6410 #define pi acos(-1.0)11 #define MAX 5000012 using namespace std;13 int code[202],an[202];14 char str1[202],str2[202];15 void init(int n)16 {17 int i,j,t;18 for... 阅读全文
摘要:
思路:仔细读题,看到FARMER是两两交换牛的顺序进行排序的话,应该就往置换上靠拢,而这个题果然是置换的应用(有的解题报告上说是置换群,其实这只是单个置换,不用让它构成群)。我们来将这些无序的牛抽象成一个置换,一次移动就是对一对元素置换。举个例子: 那么我们用置换环表示应该是(1 6 5)(2 3 4)这样两个3阶环,也就是说这六头牛是两个无序子序列,每个子序列内部按坐标排好序则整体有序,既然要使代价最小,我们就应该让置换的次数尽量少,置换的两个数和尽量小。根据上面的划分,我们知道在一个长度为m的环中至少要移动... 阅读全文
摘要:
组合数学!!!详情见:http://hi.baidu.com/lxyzmnwvhokptur/item/18c806469a668fe31e19bc1a#0 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #define ll __int64 9 #define pi acos(-1.0)10 #define MAX 5000011 using namespace std;12 char a[10];13 int C(int n,int m){14 int sum =1;15 ... 阅读全文
摘要:
题解:使用排列组合的知识解决!!!主要求1-n之间的Round Numbers,然后减下就可以了,现在主要就是怎样求n以内的Round Numbers数。分2部分求:1.计算出n的2进制位数为m,这1-(m-1)之间的数可以很快求出,当为偶数2k的时候:C(2k-1,k)+C(2k-1,k+1)+……+C(2k-1,2k-1)=2^(2k-2);当为奇数2k+1的时候:C(2k,k+1)+C(2k,k+2)+……+C(2k,2k)=2^(2k-1)-1/2*C(2k,k);2.再就是求m个2进制位时的Round Numbers数。由于第一个数一定是1所以不变然后继续向低位扫描,并计数0的个数, 阅读全文
摘要:
动态规划!!! 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #define ll __int64 9 #define pi acos(-1.0)10 #define MAX 5000011 using namespace std;12 ll dp[202][202];13 int score[5][5]={14 5,-1,-2,-1,-3,15 -1,5,-3,-2,-4,16 -2,-3,5,-2,-2,17 -1,-2,-2,5,-1,18 ... 阅读全文
摘要:
数据不是很大,直接枚举约数,判断4个条件是否满足!这样就得到4种卡片,总共2^4种情况,枚举各种情况即可!!! 1 #include 2 #include 3 #include 4 #define MAX 5000005 5 #define ll long long 6 using namespace std; 7 bool ispri[MAX]; 8 int extra[4]; 9 struct card 10 { 11 int score,num,s; 12 }p[1002]; 13 bool cmp(const card &aa,const card &bb){... 阅读全文