zoukankan      html  css  js  c++  java
  • BestCoder Round #16

    BestCoder Round #16

    题目链接

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

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

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

    C:首先假设知道Nim游戏的,就非常easy转化问题为。一些数字能否选几个能否异或和为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
    ", 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
    ", 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
    ", rank(40, n) > 0 ?

    "Yes" : "No"); } return 0; }



    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    .dll .h .lib等文件的作用与区别
    [转自]语言黑客的福音
    [转载]一个台湾程序员的心历路程
    Servlet学习总结
    会话跟踪(Cookie & Session)
    JSP学习总结
    人往高处走,水往低处流
    GDI 和GDI+ 混合编程
    常用到的知识
    Sqlite3相关
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4639142.html
Copyright © 2011-2022 走看看