赛后总结:

  T:今天状态一般,甚至有点疲惫。然后12点比赛开始,和队友开始看题,从最后往前面看,发现数学题公式看不懂。然后发现队友已经双开做1001和1006了,我看着1007有人A,开始做1007。看了一会发现这是一个简单签到题,构造一下就完事了。然后一遍A,结束。在他们看1008的时候,我回去看1002和1003,1002的题意没看清楚,队友说的也有点模糊,然后不知道怎么下手。开始看1003,因为A的人真的好多呜呜呜。从AC自动机一直re转为后缀自动机,然后不会。结束了。今天对队伍的贡献太少了,复杂度也没算好,一直在re。做题策略还是有点问题,不该纠结自己不会的领域。然后也有很多不会的知识需要去弥补。

P:lucky,从中间看到的第一题就是一道签到题。但由于读题不完整,在输出格式上WA了2-3次。所幸,过了。然后,就去看了钓鱼那题,将题意告诉了队友,队友有思路直接开做,我负责着错误样例。期间,我考虑到的一个点跟队友说,队友无法理解,我就想着自己打打看。AC后,才发现,队友这次想复杂了。接着的1002,1003,只能说自己的知识储备不够,大概从题目能够知道用了什么算法,但无法解决。

  J:今天状态贼差,1008WA了七八次还是没A出来,结果是我想复杂了,队友一下就A了,还是太弱了,1002是线段树,但是不知道该怎么做,看来应该做一下线段树专题了。

部分题解:

1001 ^&^

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<queue>
#include<set>
#include<cmath>
#include<string>
#include<map>
#include<vector>
#include<ctime>
#include<stack>
using namespace std;
#define mm(a,b) memset(a,b,sizeof(a))
typedef long long ll;
const long long mod = 1e9 + ;
const int maxn = 1e6 + ; int main()
{
ll a, b, c, k, cnt;
int t;
cin >> t;
k = ;
while (t--)
{
c = , k = , cnt = ;
scanf("%lld%lld", &a, &b);
int flag = ;
while (a || b)
{
if (a & && b & )
{
c += k;
}
else if ((a & ) + (b & ) == && flag)
{
flag = , cnt = k;
}
a >>= , b >>= ;
k <<= ;
}
if (!c) c = cnt == ? : cnt;
printf("%lld\n", c);
}
}

1002 array

题解来源:https://mmfunnytree.github.io/2019/08/23/begin14/#more?tdsourcetag=s_pcqq_aiomsg 原博主的代码有点点小问题,不能直接提交哦

分析

    • 首先可以想到,由于一开始给的A数组是个排列,且第一种操作加的数字固定为1e7,所以,操作1可以认为在原序列中删除了A[i]A这个数字;
    • 那么我们可以把A[i]这个数字标记为已经被删除,那么下次查询的时候,一方面我们可以从原序列中去查询第一个大于等于k,且未在A[1..r]出现过的数字,另一方面,我们可以在标记删除的容器里二分找到第一个不小于k的数字,两者取小便可,根据排列的性质,这两个数字一定不会冲突;
    • 所以问题就变成了,维护一个set,存放被删除的数字,构造一个主席树,然后查询的时候直接找到第一个合适的数字便可。
#pragma comment(linker, "/STACK:1024000000,1024000000")
#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<queue>
#include<set>
#include<cmath>
#include<string>
#include<map>
#include<vector>
#include<ctime>
#include<stack>
using namespace std;
#define mm(a,b) memset(a,b,sizeof(a))
typedef long long ll;
const long long mod = 1e9+;
const int maxn = 2e5;
set<int>st;
int n,m,lst;
int T[maxn],lson[maxn*],rson[maxn*],c[maxn*],tot;
int a[maxn]; void update(int &u,int p,int l,int r)
{
++tot;
lson[tot]=lson[u];
rson[tot]=rson[u];
c[tot]=c[u]+;
u=tot;
if(l==r) return;
int mid=(l+r)>>;
if(p<=mid) update(lson[u],p,l,mid);
else update(rson[u],p,mid+,r);
} int tmp1;
void query(int rt,int L,int R,int l,int r)
{
if(tmp1<n+) return;
if(L<=l&&R>=r)
{
if(c[rt]==)
{
tmp1=l;return;
}
if(c[rt]==r-l+) return;
int mid=(l+r)>>;
if(c[lson[rt]]==mid-l+) query(rson[rt],L,R,mid+,r);
else query(lson[rt],L,R,l,mid);
}
int mid=(l+r)>>;
if(L<=mid) query(lson[rt],L,R,l,mid);
if(R>mid) query(rson[rt],L,R,mid+,r);
} int main()
{
int t;
scanf("%d",&t);
while(t--)
{
st.clear();
tot=;lst=;
scanf("%d %d",&n,&m);
st.insert(n+);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
T[i]=T[i-];
update(T[i],a[i],,n);
}
int op,pos,r,k;
while(m--)
{
scanf("%d",&op);
if(op==)
{
scanf("%d",&pos);
pos^=lst;
st.insert(a[pos]);
}
else
{
scanf("%d %d",&r,&k);
r^=lst,k^=lst;
int ans=*(st.lower_bound(k));
tmp1=n+;
query(T[r],k,n,,n);
ans=min(ans,tmp1);
printf("%d\n",ans);
lst=ans;
}
}
}
return ;
}

1003 K-th occurrence

#pragma comment(linker, "/STACK:1024000000,1024000000")
#pragma GCC optimize(2)
#include <bits/stdc++.h>
using namespace std;
#define mm(a,b) memset(a,b,sizeof(a))
typedef long long ll;
const long long mod = ;
const int maxn = 1e5+;
const int inf = 0x3f3f3f3f;
char s[maxn];
struct Tree{
int tot, rt[maxn], lson[maxn*], rson[maxn*], cnt[maxn*];
int build (int l, int r) {
int o = ++tot;
int mid = (l + r) >> ;
cnt[o] = ;
if (l != r) {
lson[o] = build(l, mid);
rson[o] = build(mid+, r);
}
return o;
}
int update(int prev, int l, int r, int v) {
int o = ++tot;
int mid = (l + r) >> ;
lson[o] = lson[prev];
rson[o] = rson[prev];
cnt[o] = cnt[prev] + ;
if (l != r) {
if (v <= mid) lson[o] = update(lson[o], l, mid, v);
else rson[o] = update(rson[o], mid+, r, v);
}
return o;
}
int query(int u, int v, int l, int r, int k) {
if (l == r) return l;
int mid = (l + r) >> ;
int num = cnt[lson[v]] - cnt[lson[u]];
if (num >= k) return query(lson[u], lson[v], l, mid, k);
else return query(rson[u], rson[v], mid+, r, k-num);
}
};
struct SuffixArray{ // 下标1
int cntA[maxn], cntB[maxn], A[maxn], B[maxn];
int Sa[maxn], tsa[maxn], height[maxn], Rank[maxn]; // Sa[i] 排名第i的下标, Rank[i] 下标i的排名
int n, dp[maxn][];
Tree T;
void build() {
T.tot = ;
T.rt[] = T.build(, n);
for (int i = ; i <= n; ++i) T.rt[i] = T.update(T.rt[i-], , n, Sa[i]);
}
void init(char *buf, int len) { // 预处理,sa,rank,height
n = len;
for (int i = ; i < ; ++i) cntA[i] = ;
for (int i = ; i <= n; ++i) cntA[(int)buf[i]]++;
for (int i = ; i < ; ++i) cntA[i] += cntA[i-];
for (int i = n; i >= ; --i) Sa[ cntA[(int)buf[i]]-- ] = i;
Rank[ Sa[] ] = ;
for (int i = ; i <= n; ++i) {
Rank[Sa[i]] = Rank[Sa[i-]];
if (buf[Sa[i]] != buf[Sa[i-]]) Rank[Sa[i]]++;
}
for (int l = ; Rank[Sa[n]] < n; l <<= ) {
for (int i = ; i <= n; ++i) cntA[i] = ;
for (int i = ; i <= n; ++i) cntB[i] = ;
for (int i = ; i <= n; ++i) {
cntA[ A[i] = Rank[i] ]++;
cntB[ B[i] = (i + l <= n) ? Rank[i+l] : ]++;
}
for (int i = ; i <= n; ++i) cntB[i] += cntB[i-];
for (int i = n; i >= ; --i) tsa[ cntB[B[i]]-- ] = i;
for (int i = ; i <= n; ++i) cntA[i] += cntA[i-];
for (int i = n; i >= ; --i) Sa[ cntA[A[tsa[i]]]-- ] = tsa[i];
Rank[ Sa[] ] = ;
for (int i = ; i <= n; ++i) {
Rank[Sa[i]] = Rank[Sa[i-]];
if (A[Sa[i]] != A[Sa[i-]] || B[Sa[i]] != B[Sa[i-]]) Rank[Sa[i]]++;
}
}
for (int i = , j = ; i <= n; ++i) {
if (j) --j;
int tmp = Sa[Rank[i] - ];
while (i + j <= n && tmp + j <= n && buf[i+j] == buf[tmp+j]) ++j;
height[Rank[i]] = j;
}
}
void st() {
for (int i = ; i <= n; ++i) {
dp[i][] = height[i];
}
for (int j = ; j <= log2(n); ++j) {
for (int i = ; i + ( << j) - <= n; ++i) {
dp[i][j] = min(dp[i][j - ], dp[i + ( << (j - ))][j - ]);
}
}
}
int rmq(int l, int r) {
if (l == r) return inf;
l++;
int len = r - l + ;
int x = log2(len);
return min(dp[l][x], dp[r - ( << x) + ][x]);
}
int findl(int pos, int len) {
int l = , r = pos;
while (l <= r) {
int mid = (l + r) >> ;
if (rmq(mid, pos) < len) l = mid + ;
else r = mid - ;
}
return l;
}
int findr(int pos, int len) {
int l = pos, r = n;
while (l <= r) {
int mid = (l + r) >> ;
if (rmq(pos, mid) < len) r = mid - ;
else l = mid + ;
}
return r;
}
int solve(int ql, int qr, int k) {
int len = qr - ql + ;
int pos = Rank[ql];
int l = findl(pos, len);
int r = findr(pos, len);
if (r - l + < k) return -;
return T.query(T.rt[l-], T.rt[r], , n, k);
}
}S; int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n,m;
scanf("%d %d",&n,&m);
scanf("%s",s+);
S.init(s,strlen(s+));
S.st();
S.build();
int l,r,k;
for(int i=;i<m;i++)
{
scanf("%d %d %d",&l,&r,&k);
printf("%d\n",S.solve(l,r,k));
}
}
return ;
}

1006 Shuffle Card

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<set>
#include<string>
#include<map>
#include<vector>
#include<ctime>
#include<stack>
#include<fstream>
#include<iomanip>
using namespace std;
#define mm(a,b) memset(a,b,sizeof(a))
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 1e5+;
const int inf = 0x3f3f3f3f;
const int mod = ;
const double PI = acos(-1.0);
int a[maxn];
int b[maxn];
map<int,int> ma;
int main(){
int n,m;
scanf("%d %d",&n,&m);
for(int i=;i<n;i++)
scanf("%d",a+i);
for(int i=;i<m;i++)
scanf("%d",b+i);
for(int i=m-;i>=;i--){
if(ma[b[i]])
b[i]=;
else
ma[b[i]]=;
}
int sum=;
for(int i=m-;i>=;i--){
if(b[i]!=){
printf("%d ",b[i]);
sum++;
}
if(sum==n)
break;
}
if(sum!=n){
for(int i=;i<n;i++){
if(!ma[a[i]]){
printf("%d ",a[i]);
sum++;
}
if(sum==n)
break;
}
}
return ;
}

1007 Windows of CCPC

#pragma comment(linker, "/STACK:1024000000,1024000000")
#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<queue>
#include<set>
#include<cmath>
#include<string>
#include<map>
#include<vector>
#include<ctime>
#include<stack>
using namespace std;
#define mm(a,b) memset(a,b,sizeof(a))
typedef long long ll;
const long long mod = 1e9+;
const int maxn = 2e5;
char mp[][];
int num[];
void init()
{
num[]=;
for(int i=;i<=;i++)
{
num[i]=num[i-]*;
}
mp[][]='C';
mp[][]='C';
mp[][]='P';
mp[][]='C';
for(int i=;i<=;i++)
{
for(int j=;j<=num[i];j++)
{
for(int k=;k<=num[i];k++)
{
if(j<=num[i-]&&k<=num[i-])
continue; if(k>num[i-]&&j<=num[i-])
{
mp[j][k]=mp[j][k-num[i-]];
}
else if(j>num[i-]&&k>num[i-])
{
mp[j][k]=mp[j-num[i-]][k-num[i-]];
}
else if(j>num[i-]&&k<=num[i-])
{
if(mp[j-num[i-]][k]=='C')
mp[j][k]='P';
else mp[j][k]='C';
}
}
}
}
} int main()
{
init();
int T;
scanf("%d",&T);
while(T--)
{
int k;
scanf("%d",&k);
for(int i=;i<=num[k];i++)
{
for(int j=;j<=num[k];j++)
{
printf("%c",mp[i][j]);
}
printf("\n");
}
}
// return ;
}

1008Fishing Master

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<queue>
#include<set>
#include<cmath>
#include<string>
#include<map>
#include<vector>
#include<ctime>
#include<stack>
using namespace std;
#define mm(a,b) memset(a,b,sizeof(a))
typedef long long ll;
const long long mod = 1e9 + ;
const int maxn = 1e6 + ;
int t, n, vis[maxn];
ll a[maxn], k;
struct node{
int id;
ll yu;
}extra[maxn];
bool cmp(node a,node b) {
return a.yu>b.yu;
}
int main()
{
ll ans = , cnt, sum;
cin >> t;
while (t--)
{
queue<ll>q;
ans = ;
cnt = ;
sum = ;
scanf("%d%lld", &n, &k);
ans+=k;
for (int i = ; i < n; ++i)
{
scanf("%lld", &a[i]);
cnt+=a[i]/k;
extra[i].id=i;
extra[i].yu=a[i]%k;
ans+=a[i];
}
if(cnt<n){
sort(extra,extra+n,cmp);
for(ll i=;i<=n-cnt-;i++){
ans+=k-extra[i].yu;
}
}
printf("%lld\n",ans);
}
}

【赛后总结+部分题解】2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛的更多相关文章

  1. [BFS,A*,k短路径] 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛 path (Problem - 6705)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=6705 path Time Limit: 2000/2000 MS (Java/Others)    Mem ...

  2. [贪心,dp] 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛 Fishing Master (Problem - 6709)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=6709 Fishing Master Time Limit: 2000/1000 MS (Java/Othe ...

  3. 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛(8/11)

    $$2019中国大学生程序设计竞赛(CCPC)\ -\ 网络选拔赛$$ \(A.\hat{} \& \hat{}\) 签到,只把AB都有的位给异或掉 //#pragma comment(lin ...

  4. 2019中国大学生程序设计竞赛-女生专场(重现赛)部分题解C-Function(贪心+优先队列) H-clock(模拟)

    Function 题目链接 Problem Description wls 有 n 个二次函数 Fi(x) = aix2 + bix + ci (1 ≤ i ≤ n). 现在他想在∑ni=1xi = ...

  5. 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛

    传送门 A.^&^ 题意: 找到最小的正数\(C\),满足\((A\ xor\ C)\&(B\ xor \ C)\)最小. 思路: 输出\(A\&B\)即可,特判答案为0的情况 ...

  6. 【2019中国大学生程序设计竞赛-女生专场】C - Function

    原题 韦神提供的思路orz 首先一个显然的性质,所有的c可以提出来,方程变成ax^2+bx的形式 因为x的值是离散的,而m的值又不大 所以一开始让x都为1(注意!x是正整数),然后每次挑一个x让他加一 ...

  7. 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛 A题

    A - ^&^ Bit operation is a common computing method in computer science ,Now we have two positive ...

  8. 2016中国大学生程序设计竞赛 - 网络选拔赛 C. Magic boy Bi Luo with his excited tree

    Magic boy Bi Luo with his excited tree Problem Description Bi Luo is a magic boy, he also has a migi ...

  9. 2016年中国大学生程序设计竞赛(合肥)-重现赛1001 HDU 5961

    传递 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...

随机推荐

  1. Spring框架使用@Autowired自动装配引发的讨论

    问题描述 有同事在开发新功能测试时,报了个错,大致就是,在使用 @Autowired 注入时,某个类有两个bean,一个叫a,一个叫b. 一般这种情况应该声明注入哪个bean,他没有声明,他不知道这个 ...

  2. 实用小工具推荐 OpenWrite

    [实用小工具推荐]给技术同学们推荐一款比较好用的工具,可以实现一稿多发,主流的技术渠道基本涵盖了:https://www.openwrite.cn/ 因为工作的关系,认识了很多做技术公众号的小伙伴,同 ...

  3. Apache NiFi 核心概念和关键特性

    本文来源于官方文档翻译 NiFi 的核心概念 NiFi 最早是美国国家安全局内部使用的工具,用来投递海量的传感器数据.后来由 apache 基金会开源.天生就具备强大的基因.NiFi基本设计理念与 F ...

  4. 5.Go-封装、继承、接口、多态和断言

    面向对象 Go语言开发者认为:面向对象就是特定类型(结构体)有着自己的方法,利用这个方法完成面向对象编程, 并没有提封装.继承.多态.所以Go语言进行面向对象编程时,重点在于灵活使用方法. Go语言有 ...

  5. .net开源生态,WTM与NCC

    天下大势,分久必合,合久必分.改朝换代都如花开花谢,过眼云烟,更别提开发语言的更迭了. 我们所坚持的,只是那最初的感动,那“只是在人群中多看了你一眼”的惊艳.三十年河东,三十年河西,不忘初心,方得始终 ...

  6. BFS DFS模板

    转载于https://blog.csdn.net/alalalalalqp/article/details/9155419 BFS模板: #include<cstdio> #include ...

  7. 如何用Hexo+Github创建自己的技术博客

    注册一个github GitHub官网.按照一般的网站注册登录执行就好了,不详细说. 安装git 安装很简单,一直下一步 git安装教程 很多教程里都说要配置环境变量,我本人安装过5次左右的git,一 ...

  8. win7-BIOS中开启AHCI模式电脑蓝屏怎么办?

    win7-BIOS中开启AHCI模式电脑蓝屏怎么办? 来源:U大师 u盘装系统 不少网友都表示给电脑安装win7系统后,如果在BIOS中开启IDE模式就一切正常而为AHCI模式时就会出现蓝屏.其实那是 ...

  9. hadoop hdfs 分布式存储

    1.克隆前的工作 1.配置好网络nat  需要设置静态ip并能通过主机上网 ssh   和  rsync  是必须下载的 2.yum install vim wget  rsync  ssh   并配 ...

  10. #348 大陆争霸(DIjkstra)

    在一个遥远的世界里有两个国家:位于大陆西端的杰森国和位于大陆东端的 克里斯国.两个国家的人民分别信仰两个对立的神:杰森国信仰象征黑暗和毁灭 的神曾·布拉泽,而克里斯国信仰象征光明和永恒的神斯普林·布拉 ...