A:签到。


  B:仅当只有一种字符时无法构成非回文串。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 1010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int T,n,cnt[];
char s[N];
int main()
{
/*#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
#endif*/
T=read();
while (T--)
{
scanf("%s",s+);n=strlen(s+);
memset(cnt,,sizeof(cnt));
for (int i=;i<=n;i++) cnt[s[i]-'a']++;
int tot=;
for (int i=;i<;i++) if (cnt[i]) tot++;
if (tot==) cout<<-<<endl;
else
{
for (int i=;i<;i++)
for (int j=;j<=cnt[i];j++)
putchar(i+'a');
cout<<endl;
}
}
return ;
}

  C:在满足条件的前提下使每对数的差尽量大。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 200010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
ll read()
{
ll x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int n;
ll a[N],b[N],l,r;
int main()
{
/*#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
#endif*/
n=read();
for (int i=;i<=(n>>);i++) a[i]=read();
l=,r=;
for (int i=;i<=(n>>);i++)
{
b[i]=l,b[n-i+]=a[i]-l;
if (b[n-i+]>r) b[i]+=b[n-i+]-r,b[n-i+]=r;
l=b[i],r=b[n-i+];
}
for (int i=;i<=n;i++) printf("%I64d ",b[i]);
return ;
}

  D:二分图染色,每个连通块贡献相乘即可。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 300010
#define P 998244353
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
ll read()
{
ll x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int T,n,m,t,p[N],color[N],white,black;
bool flag;
struct data{int to,nxt;
}edge[N<<];
void addedge(int x,int y){t++;edge[t].to=y,edge[t].nxt=p[x],p[x]=t;}
void dfs(int k,int c)
{
if (flag==) return;
color[k]=c;if (c==) white++;else black++;
for (int i=p[k];i;i=edge[i].nxt)
{
if (flag==) return;
if (color[edge[i].to]==-) dfs(edge[i].to,c^);
else if (color[edge[i].to]==c) {flag=;return;}
}
}
int ksm(int a,int k)
{
int s=;
for (;k;k>>=,a=1ll*a*a%P)if (k&) s=1ll*s*a%P;
return s;
}
int main()
{
/*#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
#endif*/
T=read();
while (T--)
{
n=read(),m=read();flag=;t=;
for (int i=;i<=n;i++) p[i]=,color[i]=-;
for (int i=;i<=m;i++)
{
int x=read(),y=read();
addedge(x,y),addedge(y,x);
}
int cnt=,ans=;
for (int i=;i<=n;i++)
if (color[i]==-)
{
white=black=,cnt++,dfs(i,);
ans=1ll*ans*(ksm(,white)+ksm(,black))%P;
}
if (flag==) ans=;
printf("%d\n",ans);
}
return ;
}

  这都啥思博题啊20min切完。E一眼树状数组套个权值线段树,犹豫了一下ECR的E会不会这么毒瘤,最后还是码了。30min之后疯狂RE22,因为空间根本开不下。这时候才想起来带修改之后树状数组套个treap和它复杂度是一样的,还能回收下空间,于是又开始码码码,过了20min终于A掉了。

  E:将每个数在两个排列里的位置视为一个二维坐标。现在要做到就是插点/删点/矩形内点的个数。树状数组套treap即可,需要回收空间。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<ctime>
using namespace std;
#define ll long long
#define N 200010
#define lson tree[k].ch[0]
#define rson tree[k].ch[1]
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
ll read()
{
ll x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int n,m,a[N],b[N],root[N],pos[N][],q[N<<],head,tail,t;
struct data{int ch[],p,x,s;
}tree[N<<];
int up(int k){tree[k].s=tree[lson].s+tree[rson].s+;}
void move(int &k,int p)
{
int t=tree[k].ch[p];
tree[k].ch[p]=tree[t].ch[!p],tree[t].ch[!p]=k,up(k),up(t),k=t;
}
void INS(int &k,int x)
{
if (k==) {if (head<tail) k=q[++head];else k=++t;tree[k].ch[]=tree[k].ch[]=;tree[k].x=x;tree[k].p=rand();tree[k].s=;return;}
tree[k].s++;
if (tree[k].x<=x) {INS(rson,x);if (tree[rson].p>tree[k].p) move(k,);}
else {INS(lson,x);if (tree[lson].p>tree[k].p) move(k,);}
}
void DEL(int &k,int x)
{
if (tree[k].x==x)
{
if (lson==||rson==) {q[++tail]=k;k=lson|rson;return;}
if (tree[lson].p>tree[rson].p) move(k,),DEL(rson,x);
else move(k,),DEL(lson,x);
}
else if (tree[k].x<x) DEL(rson,x);
else DEL(lson,x);
up(k);
}
int find(int k,int x)
{
if (!k) return ;
if (tree[k].x<=x) return tree[lson].s++find(rson,x);
else return find(lson,x);
}
void ins(int k,int x)
{
while (k<=n) INS(root[k],x),k+=k&-k;
}
void del(int k,int x)
{
while (k<=n) DEL(root[k],x),k+=k&-k;
}
int query(int k,int x)
{
int ans=;
while (k) ans+=find(root[k],x),k-=k&-k;
return ans;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
#endif
n=read(),m=read();
srand(time());
for (int i=;i<=n;i++) a[i]=read(),pos[a[i]][]=i;
for (int i=;i<=n;i++) b[i]=read(),pos[b[i]][]=i;
for (int i=;i<=n;i++) ins(i,pos[a[i]][]);
for (int i=;i<=m;i++)
{
int op=read();
if (op==)
{
int la=read(),ra=read(),lb=read(),rb=read();
printf("%d\n",query(ra,rb)-query(ra,lb-)-query(la-,rb)+query(la-,lb-));
}
else
{
int x=read(),y=read();
del(pos[b[x]][],x),del(pos[b[y]][],y),
ins(pos[b[x]][],y),ins(pos[b[y]][],x);
swap(b[x],b[y]);
}
}
return ;
}

  G:将两点间曼哈顿距离的绝对值展开讨论,可以发现对于每种情况,两点每维坐标的贡献与其原来该维坐标的关系都是相同的(即正或负),于是线段树暴力维护2k种状态即可。我也不知道为什么两个树套树我只写了50min(bit套树根本就没什么码量吧),一个裸的线段树我能写40min。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<ctime>
using namespace std;
#define ll long long
#define N 200010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int n,m,k,a[N][];
struct data{int l,r,f[],g[];
}tree[N<<];
void dfs(int node,int x,int p,int s,int sum)
{
if (p==k) {tree[node].f[sum]=tree[node].g[sum]=s;return;}
dfs(node,x,p+,s-a[x][p],sum);
dfs(node,x,p+,s+a[x][p],sum|(<<p));
}
data merge(data x,data y)
{
data u;u.l=x.l,u.r=y.r;
for (int i=;i<(<<k);i++)
u.f[i]=max(x.f[i],y.f[i]),u.g[i]=min(x.g[i],y.g[i]);
return u;
}
void build(int k,int l,int r)
{
tree[k].l=l,tree[k].r=r;
if (l==r) {dfs(k,l,,,);return;}
int mid=l+r>>;
build(k<<,l,mid);
build(k<<|,mid+,r);
tree[k]=merge(tree[k<<],tree[k<<|]);
}
void modify(int k,int x)
{
if (tree[k].l==tree[k].r) {dfs(k,x,,,);return;}
int mid=tree[k].l+tree[k].r>>;
if (x<=mid) modify(k<<,x);
else modify(k<<|,x);
tree[k]=merge(tree[k<<],tree[k<<|]);
}
data query(int k,int l,int r)
{
if (tree[k].l==l&&tree[k].r==r) return tree[k];
int mid=tree[k].l+tree[k].r>>;
if (r<=mid) return query(k<<,l,r);
else if (l>mid) return query(k<<|,l,r);
else return merge(query(k<<,l,mid),query(k<<|,mid+,r));
}
int main()
{
n=read(),k=read();
for (int i=;i<=n;i++)
for (int j=;j<k;j++)
a[i][j]=read();
build(,,n);
m=read();
for (int i=;i<=m;i++)
{
int op=read();
if (op==)
{
int x=read();
for (int j=;j<k;j++) a[x][j]=read();
modify(,x);
}
else
{
int l=read(),r=read();
data x=query(,l,r);
int ans=;
for (int i=;i<(<<k);i++)
ans=max(ans,x.f[i]-x.g[i]);
printf("%d\n",ans);
}
}
}

  F:没看。

  突然小号也变得橘里橘气。result:rank 10 rating +170

Educational Codeforces Round 56 Div. 2 翻车记的更多相关文章

  1. Educational Codeforces Round 55 Div. 2 翻车记

    A:签到. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> ...

  2. Educational Codeforces Round 53 Div. 2翻车记

    A:差点开场懵逼.只要有相邻两位不同就可以作为答案. #include<iostream> #include<cstdio> #include<cmath> #in ...

  3. Codeforces Round#500 Div.2 翻车记

    A:签到 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> # ...

  4. Codeforces Round#509 Div.2翻车记

    A:签到 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> # ...

  5. Codeforces Round#514 Div.2 翻车记

    A:签到 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> # ...

  6. Codeforces Round #524 Div. 2 翻车记

    A:签到.room里有一个用for写的,hack了一发1e8 1,结果用了大概600+ms跑过去了.惨绝人寰. #include<iostream> #include<cstdio& ...

  7. Codeforces Round#516 Div.1 翻车记

    A:开场懵逼.然后发现有人1min过,于是就sort了一下,于是就过了.正经证明的话,考虑回文串两端点一定是相同的,所以最多有Σcnti*(cnti+1)/2个,cnti为第i种字母出现次数.而sor ...

  8. Codeforces Round #517 Div. 1翻车记

    A:真的懵逼了.冷静了半天之后决定二分一下答案,然后先a安排上尽量小的再贪心地一个个扩大.40min才过.这个做法非常怂的以代码复杂度和时间复杂度为代价换取了比较稳的正确性,事实上由于1~n可以组合出 ...

  9. Educational Codeforces Round 84 (Div. 2)

    Educational Codeforces Round 84 (Div. 2) 读题读题读题+脑筋急转弯 = =. A. Sum of Odd Integers 奇奇为奇,奇偶为偶,所以n,k奇偶性 ...

随机推荐

  1. 利用自定义 ORM 下使用 flask-login 做登录校验使用笔记

    1. 安装: pip install flask_login 2. 使用: 注册应用 import os from flask_login import LoginManager, current_u ...

  2. 【Unity Shader】(七) ------ 复杂的光照(下)

    笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题.              [Unity Sha ...

  3. SQL知识点脑图(一张图总结SQL)

    sql语言的分类DDL:create drop alter DML:insert delete update DCL:rollback grant revoke commit 概要,主外键,视图,索引 ...

  4. 《Redis设计与实现》阅读笔记(二)--简单动态字符串

    简单动态字符串 Redis只在一些无需对字符串进行修改的地方使用C字符串,大部分时候使用简单动态字符串(simple dynamic string, SDS),字符串的抽象类型.二进制安全,可以存放任 ...

  5. Python中remove,pop,del的区别

    先上题:写出最终打印的结果 a = [1, 2, 3, 4] for x in a: a.remove(x) print(a) print("=" * 20) b = [1, 2, ...

  6. SICP读书笔记 2.5

    SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...

  7. Java 快排 排序

    一.快排的一种 ==================== public class myMain { public static void main(String[] args) { int t[] ...

  8. 高可用OpenStack(Queen版)集群-10.Nova计算节点

    参考文档: Install-guide:https://docs.openstack.org/install-guide/ OpenStack High Availability Guide:http ...

  9. 配置tensorflow环境(anaconda+jupyter notebook)

    很早之前,tensorflow环境之前我也曾装过,但是用的不是很舒服,很多问题都不明所以然.今天想要系统地学习一下tensorflow,于是又重新搭建了一遍,这次还是踩了不少坑.特此写下此文,供有兴趣 ...

  10. 基于Linux-3.9.4内核增加简单的时间片轮转功能

    简单的时间片轮转多道程序内核代码 原创作品转载请注明出处https://github.com/mengning/linuxkernel/ 作者:sa18225465 一.安装 Linux-3.9.4 ...