码迷,mamicode.com
首页 > 其他好文 > 详细

BestCoder Round #16

时间:2014-11-01 23:16:51      阅读:327      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   os   ar   for   sp   

BestCoder Round #16

题目链接

这场挫掉了,3挂2,都是很sb的错误 23333 QAQ

A:每个数字,左边个数乘上右边个数,就是可以组成的区间个数,然后乘的过程注意取模不然会爆掉

B:dp,dp[i][2]记录下第一长的LIS,和第二长的LIS,哎,转移的时候一个地方写挫掉了导致悲剧啊QAQ

C:首先如果知道Nim游戏的,就很容易转化问题为,一些数字是否能选几个能否异或和为0,那么就是每个数字拆成40位,然后每一位异或和为0,这样就可以构造出40个方程,然后高斯消元求解,如果有自由变元就是有解,因为必然有一个全是0的解,而由于不能全取,所以这个解是错误的,那么就变成判断自由变元个数了,还是一个地方写挫掉了悲剧啊QAQ

代码:

A:

#include <cstdio>
#include <cstring>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;

typedef long long ll;
const int N = 500005;
const ll MOD = 1000000007;

int t, n;
ll a;

int main() {
	scanf("%d", &t);
	while (t--) {
		scanf("%d", &n);
		ll ans = 0;
		for (ll i = 0; i < n; i++) {
			scanf("%I64d", &a);
			ans = (ans + a * (n - i) % MOD * (i + 1) % MOD) % MOD;
		}
		printf("%I64d\n", ans);
	}
	return 0;
}


B:

#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;

const int N = 1005;

int t, n, a[N], dp[N][2];

int main() {
	scanf("%d", &t);
	while (t--) {
		scanf("%d", &n);
		int ans0 = 0, ans1 = 0;
		for (int i = 1; i <= n; i++) {
			scanf("%d", &a[i]);
			dp[i][0] = 1; dp[i][1] = 0;
			for (int j = 1; j < i; j++) {
				if (a[i] <= a[j]) continue;
				if (dp[i][0] <= dp[j][0] + 1) {
					dp[i][1] = dp[i][0];
					dp[i][0] = dp[j][0] + 1;
				} else if (dp[i][1] < dp[j][0] + 1) {
					dp[i][1] = dp[j][0] + 1;
				}
				dp[i][1] = max(dp[i][1], dp[j][1] + 1);
			}
			if (ans0 <= dp[i][0]) {
				ans1 = ans0;
				ans0 = dp[i][0];
			} else if (ans1 < dp[i][0]) ans1 = dp[i][0];
			ans1 = max(ans1, dp[i][1]);
		}
		printf("%d\n", ans1);
	}
	return 0;
}

C:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

typedef long long ll;

const int N = 1005;
int t, n, A[45][N];
ll a;

int rank(int m, int n) {
	int i = 0, j = 0, k, r, u;
	while (i < m && j < n) {
		r = i;
		for (k = i; k < m; k++)
			if (A[k][j]) {r = k; break;}
		if (A[r][j]) {
			if (r != i) for(k = 0; k <= n; k++) swap(A[r][k], A[i][k]);
			for (u = i + 1; u < m; u++) if (A[u][j])
				for (k = i; k <= n; k++) A[u][k] ^= A[i][k];
			i++;
		}
		j++;
	}
	return n - i;
}

int main() {
	scanf("%d", &t);
	while (t--) {
		scanf("%d", &n);
		memset(A, 0, sizeof(A));
		for (int i = 0; i < n; i++) {
			scanf("%lld", &a);
			for (int j = 0; j < 40; j++)
				A[j][i] = (a>>j)&1;
		}
		printf("%s\n", rank(40, n) > 0 ? "Yes" : "No");
	}
	return 0;
}


BestCoder Round #16

标签:style   blog   http   io   color   os   ar   for   sp   

原文地址:http://blog.csdn.net/accelerator_/article/details/40687325

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!