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. Maven+spring+springMVC+mybatis+Junit+Log4j配置个人总结

          首先粘贴上项目引用地址:http://doc.okbase.net/fengshizty/archive/126397.html 这里对创建步骤不做过多解释,只是针对案例创建demo的一些 ...

  2. Idea for Mac 快捷键(快捷键选择:Mac OS X 10.5+)

    删除一行          command + delete 查找          command + f 查找替换          command + r 复制一行          comma ...

  3. [Processing]在画布上写文本

    准备工作 这一步只是我强迫症犯了哈,这个随意,画几根线而已.每一小格10个像素,中格50,大格100像素 void setup() { size(,); } void draw() { backgro ...

  4. VS2017+CMake+OpenCV下报错 set OpenCV_FOUND to FALSE

    问题 在 VS 2017 中使用Cmake 管理项目, 使用 opencv 库, 在find package的时候出现能找到 OpenCVConfig.cmake的文件,但是设置 OpenCV_Fou ...

  5. node http模块搭建简单的服务和客户端

    node-http Node.js提供了http模块,用于搭建HTTP服务端和客户端. 创建Web服务器 server.js /** * node-http 服务端 */ let http = req ...

  6. 学霸网站-Alpha版本发布说明

    项目名称 学霸网站 项目版本 Alpha 项目团队 ourteam 发布日期 2014-11-23 一.版本的新功能 1.匿名提问 用户提问的时候可以选择匿名提问,这样在问题的详细信息不会显示提出者的 ...

  7. Daily Srum 10.22

    今天大家的状态比较好,但是还是有很多问题没有解决.首先就是服务器这方面,部分同学还不怎么会用:其次就是看代码出现了困难,不能完整地阅读:还有就是我们的昨天的任务有点困难,部分同学不能按时按量的完成!于 ...

  8. Wpf+数据库代码封装+策略模式封装

    运行界面: 数据库保存的题: 数据库封装代码: using System; using System.Collections.Generic; using System.Linq; using Sys ...

  9. 经验分享(Android开发)

    以前对于Android开发一点了解都没有,当然,以前觉得是一件很高大上的事情,而且是我没有能力去做的工作,但是在这个小组合作开发Android后,我觉得我有了很大的进步,当然我的进步也是Android ...

  10. 【CSAPP笔记】11. 存储器层次结构

    在没有专门研究存储器系统之前,我们依赖的存储器模型是一个很简单的概念,也就是把它看成一个线性数组,CPU 能在一个常数时间内访问任何一个存储器位置.虽然在研究别的问题时,这是一个有效的模型,但是它不能 ...