摘要: 由于要输出方案,变得复杂了。数据不是很大,首先打表,所有whthoff 的奇异局势。然后直接判断是否为必胜局面。如果必胜,首先判断能否直接同时相减得到。这里不需要遍历或者二分查找。由于两者同时减去一个数,他们的差不变,而且ak=k*(sqrt(5)+1),bk=ak+k;则可以通过二者的差直接定位,然后判断。对于另外一种情况,其中一个减去某个数,得到奇异局势,则是分情况二分查找。注意一些细节代码如下: 1 #include 2 #include 3 #include 4 #define M 1000002 5 using namespace std; 6 int a[M/2],b[M/2],c 阅读全文
posted @ 2013-08-16 22:18 _随心所欲_ 阅读(277) 评论(0) 推荐(0)
摘要: 求可行的方案数!!代码如下: 1 #include 2 int a[120]; 3 int main(){ 4 int n,m; 5 while(scanf("%d",&n)&&n){ 6 m=0; 7 for(int i=0;i<n;i++){ 8 scanf("%d",&a[i]); 9 m^=a[i];10 }11 int cnt=0;12 for(int i=0;i<n;i++)13 if((m^a[i])<a[i])1... 阅读全文
posted @ 2013-08-16 21:15 _随心所欲_ 阅读(120) 评论(0) 推荐(0)
摘要: 思路:当n1时,先手操作之后必定形成链,后手操作后形成二条一样的链,之后,先手怎么操作,后手就怎么操作,则后手必胜。代码如下: 1 #include 2 int main(){ 3 int t,k=0,n,m; 4 scanf("%d",&t); 5 while(t--){ 6 scanf("%d%d",&n,&m); 7 printf("Case %d: %s\n",++k,((m==1&&(n&1))||n<=m)?"first":"second& 阅读全文
posted @ 2013-08-16 20:44 _随心所欲_ 阅读(153) 评论(0) 推荐(0)
摘要: 离线+分块!!思路:序列a[1],a[2],a[3]……a[n]num[i]表示区间[L,R]中是i的倍数的个数;euler[i]表示i的欧拉函数值。则区间的GCD之和sum=∑(C(num[i],2)*euler[i]).当增加一个数时,若有约数j,则只需加上num[j]*euler[j],之后再num[j]++;反之亦然!!代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #define ll __int64 9 #define pi acos(-1.0... 阅读全文
posted @ 2013-08-16 19:48 _随心所欲_ 阅读(690) 评论(2) 推荐(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 10010511 using namespace std;12 int R,L,an[MAX],ans[MAX],res;13 bool vis[MAX];14 struct node15 {16 int x,y,l,p;17 }q[MAX];18 bool... 阅读全文
posted @ 2013-08-16 17:35 _随心所欲_ 阅读(291) 评论(0) 推荐(0)
摘要: 离线+分块将n个数分成sqrt(n)块。对所有询问进行排序,排序标准: 1. Q[i].left /block_size 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define N 200100 8 typedef long long ll; 9 ll a[N], cnt[N*5], ans[N], res;10 int L, R;11 12 struct node {13 int x, y, l, p;14 } q[N];15 bool cmp(const node &x,... 阅读全文
posted @ 2013-08-16 16:54 _随心所欲_ 阅读(208) 评论(0) 推荐(0)
摘要: 这是一题简单的博弈论!!所有的空白+边界的数字(个数为n)为一堆,容易推出其SG函数值为n%2+1;其他所有的数字(个数为m)的SG值为m%2。再就是用dfs将空白部分搜一下即可!(注意细节)代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #define MAX 1005 9 #pragma comment(linker,"/STACK:1024000000,1024000000") 10 using namespace std; 11 int vis[ 阅读全文
posted @ 2013-08-16 13:16 _随心所欲_ 阅读(239) 评论(0) 推荐(0)