2019.4.18训练

今天的题还是挺不错的:

1:codeforces811c

我先贴一个博客上来:https://blog.csdn.net/westbrook1998/article/details/82929293

感觉这个人的思路和我差不多,可能这种题都差不多的做法把。。。。。。。。。。。。。。。

网上都差不多,直接上代码把,题解在代码里面:

 1 /*
 2      首先这道题它给了你ai的范围是0-5000
 3      然后它告诉了你如果取一个数,就要取全部的数
 4      那么就肯定要处理出全部的段出来,然后接下来的话我们就预处理一下L ,R
 5      然后类似最长上升子序列那样预处理一波就行了
 6      注意一下长度为1的段,我一开始wa了一发
 7 */
 8 #include <iostream>
 9 #include <cstdio>
10 #include <cstring>
11 #include <cmath>
12 #include <algorithm>
13 #include <bitset>
14 typedef long long ll;
15 using namespace std;
16 int dp[5010];
17 int maxdp[5010];
18 int cnt[5010][5010];//合法段的区间异或值
19 int n;
20 int ai[5010];
21 int l[5010];
22 int r[5010];
23 int main(){
24     scanf("%d",&n);
25     for(int i=1;i<=n;i++) scanf("%d",&ai[i]);
26     memset(l,-1,sizeof(l));
27     memset(r,-1,sizeof(r));
28     memset(cnt,-1,sizeof(cnt));
29     dp[0]=0;
30     for(int i=1;i<=n;i++) if(l[ai[i]]==-1) l[ai[i]]=i;
31     for(int i=n;i>=1;i--) if(r[ai[i]]==-1) r[ai[i]]=i;
32     for(int i=1;i<=n;i++){
33         if(l[ai[i]]!=i) continue;
34         int maxx=r[ai[i]];
35         int ans=ai[i];
36         for(int j=i;j<=n;j++){
37             if(l[ai[j]]<i){
38                 break;
39             }
40             if(l[ai[j]]==j&&j!=i){
41                 ans^=ai[j];
42                 maxx=max(maxx,r[ai[j]]);
43             }
44             if(maxx==j) cnt[i][j]=ans;
45         }
46     }
47     int ans=0;
48     for(int i=1;i<=n;i++){
49         for(int j=1;j<=i;j++){
50             if(cnt[j][i]!=-1){
51                 dp[i]=max(dp[i],maxdp[j-1]+cnt[j][i]);
52             }
53         }
54         ans=max(ans,dp[i]);
55         maxdp[i]=max(dp[i],maxdp[i-1]);
56     }
57     //cout<<cnt[3][5]<<endl;
58     printf("%d\n",ans);
59     return 0;
60 }

2:codeforces630G

首先这个5个黑和3个红是不互相影响的

那么我们只要分别对这个分析一波就行了

然后上上代码

先鸽了下,下次再补

#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cmath>
#include <bitset>
#include <cstring>
typedef long long ll;
using namespace std;
ll n;

ll C(ll a,ll b){
    ll f1=1,f2=1;
    for(ll i=a;i>=a-b+1;i--){
        f1*=i;
    }
    for(ll i=1;i<=b;i++){
        f2*=i;
    }
    return f1/f2;
}

int main(){
    scanf("%lld",&n);
    if(n==1) printf("1\n");
    else if(n==2) printf("24\n");
    else if(n==3){
        printf("210\n");
    }else if(n==4){
        printf("1120\n");
    }else {
        ll ans1=C(n,3)+C(n,1)+C(n,1)*C(n-1,1);
        //ll ans2=C(n,5)+C(n,1)*C(n-1,1)+C(n,1)+C(n,1)*C(n-1,1)+C(n,1)*C(n-1,2)+C(n,1)*C(n-1,2);
        ll ans2=C(n,5)+4*C(n,4)+6*C(n,3)+4*C(n,2)+C(n,1);
        // 1个       4个          5个         3个            3个             2个
        cout<<ans1*ans2<<endl;
    }
    return 0;
}

原文地址:https://www.cnblogs.com/pandaking/p/10674431.html

时间: 2024-10-09 18:35:51

2019.4.18训练的相关文章

2019.3.18考试&amp;2019.3.19考试

2019.3.18 C O D E T1 树上直接贪心,环上for一遍贪心 T2 正反都做一遍DP T3 观察到顺序不影响答案,分块打标记 2019.3.19 肥肠爆芡,因为沙茶博主昨天在学校的煞笔食堂吃坏了肚子,所以这场考试咕咕了 我佛了 一定补这两场.jpg 原文地址:https://www.cnblogs.com/ydnhaha/p/10558495.html

2019.11.30训练赛总结

2019.11.30训练赛总结 Codeforces Round #499 (Div. 2) 总的来说是一场很不愉快的比赛.漏洞百出. 对于A题,其实没有什么技术含量,只是写的时候忘记了边界的情况,导致出现错误. B题,一定程度上考验了思维,既然从正面做不行,那么我可以反着来,既然求不可以正向求出答案,那我可以把答案枚举带进去看是否符合条件啊,如果数据范围再大点的话还可以二分. D题,也反应出了自己的一个漏洞,就是懒得一步一步去推数据,代数据进去.当出现bug的时候,最直接,最有效的办法,就是把

【C语言解惑课堂】解惑内容合集(2019.8.18更新)

我的知识星球:"C语言解惑课堂"截止到2019年8月18日的所有解惑内容如下.要查看详细解析的C语言难点或者需要提问的同学,微信扫扫文末的星球二维码加入吧! 一.基础难点剖析 [第1篇][C语言基础][unsigned short类型用于循环的一个难点] [第2篇][C语言基础][unsigned int溢出] [第3篇][C语言基础][int类型溢出] [第4篇][C语言基础][字符与字符串的区别] [第5篇][C语言基础][&&运算符两边的数值] [第33篇][C语

【单调栈维护连续区间】2019.1.18模拟赛T2 浇花

这道题是一道单调栈的题 1 题目描述 2 JDFZ在餐厅门前种了一排nn棵花,每棵花都有一个高度.浇花大爷会枚举所有的区间,然后从区间中找出一个高度最矮的花进行浇水.由于浇花大爷浇完水之后就精疲力竭了,所以请你帮助他计算每棵花都被浇了几次水. 3 4 输入格式 5 第一行一个整数nn. 第二行nn个整数,分别表示每棵花的高度. 6 7 输出格式 8 一行nn个整数用空格隔开,分别表示每棵花被浇了几次水. 9 10 样例一 11 input 12 3 13 1 3 5 14 output 15 3

2019.2.18接口

父类手机类: 1 package com.phone; 2 3 public abstract class Phone { 4 public String brand; 5 public String type; 6 7 public Phone(String brand, String type) { 8 super(); 9 this.brand = brand; 10 this.type = type; 11 } 12 13 public abstract void send(); 14

2019省赛训练组队赛4.9周二 2017浙江省赛

A - Cooking Competition "Miss Kobayashi's Dragon Maid" is a Japanese manga series written and illustrated by Coolkyoushinja. An anime television series produced by Kyoto Animation aired in Japan between January and April 2017. In episode 8, two

学习总结2019.4.18

__init__方法 # 强调: # 1.该方法内可以有任意的python代码 # 2.一定不能有返回值 class People: country='China' x=1 ? def __init__(obj, name, age, sex): #obj=obj1,x='egon',y=18,z='male' # if type(name) is not str: # raise TypeError('名字必须是字符串类型') obj.name = name obj.age = age obj

HPU积分赛 2019.8.18

A题 给出n个数,问这n个数能不能分成奇数个连续的长度为奇数并且首尾均为奇数的序列 Codeforces849A 题解传送门 代码 1 #include <bits/stdc++.h> 2 #define ll long long 3 #define ull unsigned long long 4 #define ms(a,b) memset(a,b,sizeof(a)) 5 const int inf=0x3f3f3f3f; 6 const ll INF=0x3f3f3f3f3f3f3f3

C++与STL知识点(2019.1.18)

1.作用对象:数组  a[n] 头文件:#include<algorithm> 内容:sort(a,a+n) 功能:进行升序排序 内容:lower_bound(a,a+n,x) 功能:找到大于等于x的位置 int pos=lower_bound(a,a+n,x)-a; 可以判断x是否存在于该数组 如果存在返回x在的位置pos,x=a[pos-1] (n>pos>0) 如果不存在的话放回pos为大于x的下标(n>=pos>=0) 原文地址:https://www.cnbl