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. 【转】阿里云Linux系统被攻击的处理过程

    4-22日 19:48分,在等女儿跳舞下课的时候,在“多看”进入大刘等人的<毁灭之城:地球碎块>,读到了“诅咒 3.0”病毒出现的时候,阿里云发来短信“尊敬的用户,您的云服务器x.x.x. ...

  2. 北美KubeCon新风,正把K8S魔力带向边缘计算

    作者:DJ 审校:Kevin·Wang 1. 容器生态圈新的创新方向 2018年容器技术圈的年终盛典北美KubeCon终于在西雅图落下了帷幕.这次北美KubeCon总共吸引了8000多观众参会,创下历 ...

  3. Qt-网易云音乐界面实现-8 主导航的实现-QtabWidget

    哎呀,堕落了,快有小两周没哟更新了,是在是没有动力了,浏览量连三位数都没有,是在是没有写下去的信心. 还有就是这个网易云音乐的代码量绝对是不可小视的,完全低估了这个软件的能量.昨天仔细想了一下,写不下 ...

  4. charles抓包https/模拟弱网/设置断点重定向/压测

    charles几个常用功能   1,ios 抓包https网页:(如未配置,会显示unknown) 第一步是:给手机安装SSL证书 手机和电脑在同一wifi下,手机wifi配置http代理,ip是电脑 ...

  5. 记录Centos7搭建ftp服务器以及遇到的各种坑

    前言 今天被经理要求搭建ftp服务器,然后就去网上搜索了一下教程.搭建成功后(遇到的坑不少)特此记录一下.因为是为了记录一下整个操作流程以防以后使用所以比较啰嗦. 目录 1.安装vsftpd 2.创建 ...

  6. Unity3D画面渲染官方教程(一)对光照和渲染的介绍

    本系列是对官方教程的翻译加上自己的一些理解译著的,官方网址:https://unity3d.com/cn/learn/tutorials/s/graphics 翻译上尽量保证准确性,但不排除省略或者添 ...

  7. 【LeetCode算法题库】Day7:Remove Nth Node From End of List & Valid Parentheses & Merge Two Lists

    [Q19] Given a linked list, remove the n-th node from the end of list and return its head. Example: G ...

  8. 32bit 天堂2服务端多机负载

    第一步..先确定..单机架设成功.. 第二步..复制整个服务器端文件到第2个服务器 第3步.. 将你C:\Program Files\Common Files\ODBC\Data Sources 中的 ...

  9. PytorchZerotoAll学习笔记(一)

    Pytorch的安装请参考torch的官方文档,传送门:https://pytorch.org/get-started/locally/ Numpy的复习 如果你之前没有学过Numpy的话,建议去看看 ...

  10. 模块-Memcached、Redis

    目录 Mecache 安装 使用 Redis 安装 Python操作Redis 操作模式 连接池 操作 String Hash List Set sort set 其他常用操作 管道 发布订阅 sen ...