A题意思是,给出两个数列,求一个区间,使第一个数列的区间或和第二个数列的区间或的和最大,输出最大和

很显然,或运算会使得答案越运算越大。所以,直接全部或起来,相加就是答案。

= =打cf的时候自动脑补成异或,浪费了好多时间,超出int情况一开始没有考虑,于是加一次重交。

#include <cstdio>
const int N=1005;
long long a[N],b[N]; int n;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){scanf("%lld",&a[i]);a[i]|=a[i-1];}
for(int i=1;i<=n;i++){scanf("%lld",&b[i]);b[i]|=b[i-1];}
return printf("%lld\n",a[n]+b[n]),0;
}

B题意思是每次给一整行或者一整列的格子刷上一种颜色,颜色会覆盖之前刷的颜色,问最后每个格子的颜色

这道题如果直接每次操作模拟上色,肯定是会超时的,所以每次记录一个行和一个列被刷的颜色和刷的时间,

那么最后保存下来的就是每一行最后一次刷的颜色和时间以及每个列最后一次刷的颜色和时间。

最后比较一下每个格子列和行的刷新时间,哪个比较迟那么格子就是哪种颜色。

时间戳啊= =,很重要的思想。

#include <cstdio>
int n,m,k,ai,bi,ci,a[50005],b[50005],at[50005],bt[50005];
int main(){
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=k;i++){
scanf("%d%d%d",&ai,&bi,&ci);
if(ai==1){a[bi]=ci;at[bi]=i;}
else{b[bi]=ci;bt[bi]=i;}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(at[i]>bt[j])printf("%d",a[i]);
else printf("%d",b[j]);
if(j==m)puts("");else printf(" ");
}
}return 0;
}

C题要求支持两种操作,1,r表示把r个数的前缀从小到大排序,2,r表示把r个数的前缀从大到小排序,问最后的序列。

这道题显然,在最长的操作序列前的所有排序都是无效的,同理,在次长和最长的操作序列间的排序是无效的,依次类推。

所以……求降序长度操作序列直接搞?(我当时是这么做的= =,显然,会超时,脑子在想什么呢当时)

最后过题的做法还是时间戳,对于操作的长度位置标上操作的种类,同时记录操作的时间,那么同等长度的显然就可以保存最后一次

在处理完数组之后,逆序操作,保证一个操作的下一个操作时间要比自己晚,也就是……先排一次序,

从后往前依次按照时间戳把序列填充进去,就可以得到答案了。

#include <cstdio>
#include <algorithm>
using namespace std;
int b[200005],c,d,now=1,n,m,a[200005],st,tim,t[200005],op[200005],l[200005];
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
for(int i=1;i<=m;i++){
scanf("%d%d",&c,&d);
op[d]=c;t[d]=i;
}for(int i=n;i;i--){if(op[i]){st=i;tim=t[i];break;}b[i]=a[i];}
sort(a+1,a+st+1); int flag=0,l=1,r=st;
while(l<=r){
if(op[st]==1&&tim<=t[st]){flag=0;tim=t[st];}
if(op[st]==2&&tim<=t[st]){flag=1;tim=t[st];}
if(flag==0)b[st--]=a[r--];
else b[st--]=a[l++];
}for(int i=1;i<n;i++)printf("%d ",b[i]);
printf("%d\n",b[n]);
return 0;
}

D题的题意简单得不要不要的,就是一个压缩字符串的kmp,

压缩字符串kmp怎么处理呢?简单= =,用pair存字母和数字

那么匹配次数计算就分为以下三种情况:

1. 模式串长度为1,直接枚举,计数原理(显然的)

2. 模式串长度为2,枚举判断是否合法

3. 模式串长度大于等于3,除去头尾扔进kmp进行模式匹配,每次匹配成功判断一下头尾,如果是那么答案加1.

看起来这个算法很完美,嗯,还是fst了,不是算法的问题,过程中数据超出int。

很多时候,还是说,细节决定成败吧。

北京赛区超高的罚时,迎新赛毁于小错误。cf屡屡栽倒在同个错误上。

我还有很长的路要走,在泥泞里多摔倒几次一身狼狈,才能把心沉得更深。

仰之弥高,钻之弥坚。

#include <cstdio>
#include <utility>
using namespace std;
pair<char,long long> s[200005],t[200005],tmp1,tmp2;
int nxt[200005],n,m,cnt1,cnt2;
long long ans,num;
char c;
void kmp(int n,pair<char,long long>*a,int m,pair<char,long long>*b){
int i,j;
for(nxt[0]=j=-1,i=1;i<n;nxt[i++]=j){
while(~j&&a[j+1]!=a[i])j=nxt[j];
if(a[j+1]==a[i])j++;
}
for(j=-1,i=0;i<m;i++){
while(~j&&a[j+1]!=b[i])j=nxt[j];
if(a[j+1]==b[i])j++;
if(j==n-1){
if(i>=n&&b[i+1].first==tmp2.first&&
b[i+1].second>=tmp2.second&&
b[i-n].first==tmp1.first&&b[i-n].second>=tmp1.second)ans++;
j=nxt[j];
}
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf(" %d-%c",&num,&c);
if(s[cnt1].first==c)s[cnt1].second+=num;
else{s[++cnt1].first=c;s[cnt1].second=num;}
}
for(int i=1;i<=m;i++){
scanf(" %lld-%c",&num,&c);
if(t[cnt2].first==c)t[cnt2].second+=num;
else{t[++cnt2].first=c;t[cnt2].second=num;}
}if(cnt2>=3){
tmp1=t[1];tmp2=t[cnt2];
kmp(cnt2-2,t+2,cnt1,s+1);
}else if(cnt2==1){
for(int i=1;i<=cnt1;i++)if(t[cnt2].first==s[i].first&&s[i].second>=t[cnt2].second){
ans+=(long long)(s[i].second-t[cnt2].second+1);
}
}else if(cnt2==2){
for(int i=1;i<cnt1;i++)if(t[1].first==s[i].first&&t[2].first==s[i+1].first
&&t[1].second<=s[i].second&&t[2].second<=s[i+1].second)ans++;
}return printf("%lld\n",ans),0;
}

E题意思是,给出一个数列,现在允许抽出一个数字重新插入,使得最后a[1]*1+a[2]*2+……+a[n]*n最大,求最大值

看别人的代码貌似二分,但是单调性不是很能看得出来,暂且搁置。

Codeforces Round#344的更多相关文章

  1. Codeforces Round #344 (Div. 2) A. Interview

    //http://codeforces.com/contest/631/problem/Apackage codeforces344; import java.io.BufferedReader; i ...

  2. Codeforces Round #344 (Div. 2) A

    A. Interview time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  3. Codeforces Round #344 (Div. 2) E. Product Sum 维护凸壳

    E. Product Sum 题目连接: http://www.codeforces.com/contest/631/problem/E Description Blake is the boss o ...

  4. Codeforces Round #344 (Div. 2) D. Messenger kmp

    D. Messenger 题目连接: http://www.codeforces.com/contest/631/problem/D Description Each employee of the ...

  5. Codeforces Round #344 (Div. 2) C. Report 其他

    C. Report 题目连接: http://www.codeforces.com/contest/631/problem/C Description Each month Blake gets th ...

  6. Codeforces Round #344 (Div. 2) B. Print Check 水题

    B. Print Check 题目连接: http://www.codeforces.com/contest/631/problem/B Description Kris works in a lar ...

  7. Codeforces Round #344 (Div. 2) A. Interview 水题

    A. Interview 题目连接: http://www.codeforces.com/contest/631/problem/A Description Blake is a CEO of a l ...

  8. Codeforces Round #344 (Div. 2) B. Print Check

    B. Print Check time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  9. Codeforces Round #344 (Div. 2)(按位或运算)

    Blake is a CEO of a large company called "Blake Technologies". He loves his company very m ...

  10. Codeforces Round #344 (Div. 2)

    水 A - Interview 注意是或不是异或 #include <bits/stdc++.h> int a[1005], b[1005]; int main() { int n; sc ...

随机推荐

  1. U盘安装ubuntu14.10时出现的gfxboot.c32:not a COM32R image问题

    最近ubuntu14.10出来了,因为从ubuntu14.04升级不是很成功,于是就重新下载了14.10的系统镜像(苦逼的无线啊).于是我按照以往的方式用软碟通将镜像解压到U盘里,重启系统,却出现了g ...

  2. 【Howie玩docker】-Centos 7 docker 启动容器iptables报No chain/target/match by that name

    重启了一下服务器,以前能运行的docker网络应用都不能正常开启了. 因为用的是centos7,所以猜测有可能是iptables的问题. docker start 或者run 后总是提示类似的错误: ...

  3. javascript学习笔记(1) 简单html语法

    <html> <head><meta http-equiv="content-type" content="text/html" ...

  4. C# Socket SSL通讯笔记

    一.x.509证书 1.制作证书 先进入到vs2005的命令行状态,即:开始-->程序-->Microsoft Visual Studio 2005-->Visual Studio ...

  5. WinSetupFromUSB – Install Windows XP from USB Flash Drive

    http://myeeeguides.wordpress.com/2008/11/15/winsetupfromusb-install-windows-xp-from-usb-flash-drive/ ...

  6. qt windows分发工具使用(windoployqt)

      在qt的安装目录下:QTDIR/bin/windeployqt 例如我的默认安装在: C:\Qt\Qt5.3.1\5.3\msvc2013 windoployqt在: C:\Qt\Qt5.3.1\ ...

  7. 解决Qt程序发布时中文乱码问题(通过QApplication.addLibraryPath加载QTextCodec插件)

    Qt程序的文字编码,是通过插件来解决的,所以我们发布的时候需要把相应的插件也发布出去,在开发者电脑上程序会自动从插件目录加载到插件,但是如果发布给别的电脑使用,需要手动指定插件路径,如下所示: int ...

  8. 如何在 静态编译的QT 5.5.1 中 使用数据库插件连接 ODBC(调用静态插件)

    前段时间由于工作的关系,需要编写一个将数据插入到 Sql server 2012 的桌面软件. 由于之前使用的是MFC,偶然间接触到了Qt后,被它的简洁惊艳到了,于是便毅然而然的转投到了Qt的怀抱,哈 ...

  9. python 读取utf8文件

    有时候默认是gbk编码,但是要读取utf8文件,所以会出现decode 错误. 使用codecs模块: import codecs file = codecs.open('filename','r', ...

  10. 雕爷牛腩这样判断零售未来-搜狐IT

    雕爷牛腩这样判断零售未来-搜狐IT 雕爷牛腩这样判断零售未来