Codeforces Round #427 (Div. 2) [ C. Star sky ] [ D. Palindromic characteristics ] [ E. The penguin's game ]
本来准备好好打一场的,然而无奈腹痛只能带星号参加 (我才不是怕被打爆呢!)
PROBLEM C - Star sky
题
OvO http://codeforces.com/contest/835/problem/C
835C
解
由于题目中给的c很小,可以对应每种亮度分别保存(c+1)个矩阵
然后初始化一下求前缀矩阵
每次询问就可以O(c)求出答案
(Accepted)
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm> using namespace std; const int M=144;
const int MM=100; int mp[M][M][20];
int pre[M][M][20];
int n,q,c;
int ans; void init()
{
int i,j,k;
memset(pre,0,sizeof(pre));
for(i=1;i<=MM;i++)
for(j=1;j<=MM;j++)
for(k=0;k<=c;k++)
pre[i][j][k]=pre[i-1][j][k]+pre[i][j-1][k]-pre[i-1][j-1][k]+mp[i][j][k];
} int main()
{
int chg,tmp,i,j,x,y,z,x1,y1,x2,y2,t;
cin>>n>>q>>c;
memset(mp,0,sizeof(mp));
for(i=1;i<=n;i++)
{
scanf("%d%d%d",&x,&y,&z);
mp[x][y][z]++;
}
init();
while(q--)
{
scanf("%d%d%d%d%d",&t,&x1,&y1,&x2,&y2);
ans=0;
for(i=0;i<=c;i++)
{
chg=(i+t)%(c+1);
tmp=pre[x2][y2][i]-pre[x1-1][y2][i]-pre[x2][y1-1][i]+pre[x1-1][y1-1][i];
ans+=tmp*chg;
}
cout<<ans<<endl;
}
return 0;
}
PROBLEM D - Palindromic characteristics
题
OWO http://codeforces.com/contest/835/problem/D
835D
解
对每两点做字符串哈希,然后搜索加记忆化(每搜索一段到一段合法的继续搜左右两边,递归,得到该段的类型,并且用类型来标记该段已经搜过)
这样搜索的时间是O(n*n),然后O(1)判断哈希值是否相等,是的话就把对应计数值+1
pretest能过,最后会不会挂掉就看我取的模了(趁终测还没结束赶紧睡觉~☆)(没挂嘿嘿嘿)
(Accepted)
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm> using namespace std; typedef unsigned long long ull; const int M=5022;
const int bas=14123; int ans[M];
char s[M];
int num[M];
int n;
unsigned hsh[M][M];
int flag[M][M]; void init()
{
int i,j;
n=strlen(s+1);
for(i=1;i<=n;i++)
{
if(s[i]>='a')
num[i]=s[i]-'a';
else
num[i]=s[i]-'A'+26;
}
memset(ans,0,sizeof(ans));
memset(flag,-1,sizeof(flag));
for(i=1;i<=n;i++)
{
hsh[i][i]=num[i];
for(j=i+1;j<=n;j++)
hsh[i][j]=hsh[i][j-1]*bas+num[j];
for(j=i-1;j>=1;j--)
hsh[i][j]=hsh[i][j+1]*bas+num[j];
}
} bool fj(int a,int b,int c,int d)
{
return true;
int i,j;
for(i=a,j=d;i<=b;i++,j--)
if(num[i]!=num[j])
return false;
return true;
} int check(int a,int d)
{
if(a==d)
{
flag[a][d]=1;
return 1;
}
int tmp=(d-a+1)/2;
int b,c;
b=a+tmp-1; c=d-tmp+1;
// cout<<a<<' '<<b<<' '<<c<<' '<<d<<' '<<hsh[a][b]<<' '<<hsh[d][c]<<endl;
if(hsh[a][b]==hsh[d][c] && fj(a,b,c,d))
{ int flag0,flag1,flag2; if(flag[a][b]!=-1)
flag1=flag[a][b];
else
{
flag1=check(a,b);
flag[a][b]=flag1;
ans[flag1]++;
} if(flag[c][d]!=-1)
flag2=flag[c][d];
else
{
flag2=check(c,d);
flag[c][d]=flag2;
ans[flag2]++;
}
flag0=min(flag1,flag2);
return flag0+1;
}
else
{
flag[a][d]=0;
return 0;
}
} void solve()
{
int i,j,a,b,c,d,len,tmp;
for(i=1;i<=n;i++)
{
for(j=i;2*j-i<=n;j++)
{
if(2*j-i<=n)
{
a=i; d=2*j-i; len=d-a+1;
if(flag[a][d]==-1)
{
tmp=check(a,d);
flag[a][d]=tmp;
ans[tmp]++;
}
}
if(2*j-i+1<=n)
{
a=i; d=2*j-i+1; len=d-a+1;
if(flag[a][d]==-1)
{
tmp=check(a,d);
flag[a][d]=tmp;
ans[tmp]++;
}
}
}
}
for(i=n;i>=1;i--)
ans[i]+=ans[i+1];
for(i=1;i<=n;i++)
{
if(i-1) printf(" ");
printf("%d",ans[i]);
}
printf("\n");
} int main()
{
int i,j;
scanf("%s",s+1);
init();
solve();
return 0;
}
一结束我就写了题解 怎么会有我这么勤奋的人呢 我真是太了不起了~☆
PROBLEM E - The penguin's game
题
OwO http://codeforces.com/contest/835/problem/E
835E
解
设要不同的2个点为p,q
1. n的范围为1000,所以最多有10位。所以可以枚举每一位,对该为为1的数字输出,这样可以知道p,q哪些位数不同。(至多10次输出)
2. p,q不同的位的数量至少为1。所以可以随便选取一位,然后,选出该位为1的数字,放入集合中,则这个集合中最多只有1个特殊点(设其为p),所以可以二分区间寻找改p(至多9次输出)
3. 找到p点之后,根据第1步中得到的p和q中各位的关系,得到q
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <vector> using namespace std; const int N=33;
const int M=1111; int n,x,y;
int dif[N],chs;
int se[N][M],lse[N];
int rep; void ask(int len,int s[])
{
printf("? %d",len);
for(int i=1;i<=len;i++)
printf(" %d",s[i]);
printf("\n");
fflush(stdout);
scanf("%d",&rep);
} void output(int ans1,int ans2)
{
printf("! %d %d\n",ans1,ans2);
fflush(stdout);
} void init()
{
int i,j,mdl;
memset(lse,0,sizeof(lse));
for(i=1;i<=n;i++)
{
for(j=0;j<10;j++)
{
mdl=(1<<j);
if(i&mdl)
se[j][++lse[j]]=i;
}
}
chs=-1;
memset(dif,0,sizeof(dif));
for(i=0;i<10;i++)
if(lse[i]!=0)
{
ask(lse[i],se[i]);
if(rep!=0 && rep!=x)
{
dif[i]=1;
if(chs==-1)
chs=i;
}
}
} void solve()
{
int ans1,ans2;
int s[M],ls;
int i,j,tmp;
ls=0;
for(i=1;i<=n;i++)
if(i&(1<<chs))
s[++ls]=i;
int li,ri,mid;
// for(i=1;i<=ls;i++)
// cout<<s[i]<<' ';
// cout<<endl;
li=1; ri=ls;
while(li!=ri)
{
mid=(li+ri)>>1;
ask((mid-li+1),s+li-1);
if(rep==0 || rep==x)
li=mid+1;
else
ri=mid;
}
ans1=s[li];
ans2=ans1^(1<<chs);
for(i=0;i<10;i++)
if(i!=chs && dif[i]==1)
ans2^=(1<<i);
if(ans1>ans2) swap(ans1,ans2);
output(ans1,ans2);
} int main()
{
cin>>n>>x>>y;
init();
solve();
return 0;
}
Codeforces Round #427 (Div. 2) [ C. Star sky ] [ D. Palindromic characteristics ] [ E. The penguin's game ]的更多相关文章
- 动态规划:Codeforces Round #427 (Div. 2) C Star sky
C. Star sky time limit per test2 seconds memory limit per test256 megabytes inputstandard input outp ...
- CF Round #427 (Div. 2) C. Star sky [dp]
题目链接就长这样子? time limit per test 2 seconds memory limit per test 256 megabytes Description The Carte ...
- CodeForces 835C - Star sky | Codeforces Round #427 (Div. 2)
s <= c是最骚的,数组在那一维开了10,第八组样例直接爆了- - /* CodeForces 835C - Star sky [ 前缀和,容斥 ] | Codeforces Round #4 ...
- CodeForces 835D - Palindromic characteristics | Codeforces Round #427 (Div. 2)
证明在Tutorial的评论版里 /* CodeForces 835D - Palindromic characteristics [ 分析,DP ] | Codeforces Round #427 ...
- Codeforces Round #427 (Div. 2)—A,B,C,D题
A. Key races 题目链接:http://codeforces.com/contest/835/problem/A 题目意思:两个比赛打字,每个人有两个参数v和t,v秒表示他打每个字需要多久时 ...
- Codeforces Round #427 (Div. 2)
B. The number on the board 题意: 有一个数字,它的每个数位上的数字的和不小于等于k.现在他改变了若干位,变成了一个新的数n,问现在的数和原来的数最多有多少位不同. 思路: ...
- Codeforces Round #427 (Div. 2) Problem D Palindromic characteristics (Codeforces 835D) - 记忆化搜索
Palindromic characteristics of string s with length |s| is a sequence of |s| integers, where k-th nu ...
- Codeforces Round #427 (Div. 2) Problem C Star sky (Codeforces 835C) - 前缀和
The Cartesian coordinate system is set in the sky. There you can see n stars, the i-th has coordinat ...
- 【Codeforces Round #427 (Div. 2) C】Star sky
[Link]:http://codeforces.com/contest/835/problem/C [Description] 给你n个星星的坐标(xi,yi); 第i个星星在第t秒,闪烁值变为(s ...
随机推荐
- 查询统计SQL分组求和使用小技巧
我们在做查询统计时,肯定会遇到将查询结果再次分组求和这种需求,但是往往查询的sql本身就比较复杂,再使用分组函数不太可能,那么这时候我们就想到了用临时表的办法,通过联合临时表我们就可以获得想要的分组求 ...
- echart4数据管理组件dataset学习
背景 如果后台数据固定,如何动态定制其前端数据展示方式呢?也就是说同一种数据,如何被多个前端Echarts图表复用呢?最近在研究一种数据展示可配置化的功能,然后发现了echart4.0的dataset ...
- 使用tqdm实现下载文件进度条
1.获取下载链接 下载链接为:http://fastsoft.onlinedown.net/down/Fcloudmusicsetup2.5.5.197764.exe 2.使用tqdm实现 2.1.从 ...
- MyBatis 体系结构、根配置文件、Mapper映射文件
一.MyBatis的体系结构 1.SqlSessionFactory对象 SqlSessionFactory对象是MyBatis的管理核心,它是单个数据库映射关系经过编译后的内存镜像,是创建SqlSe ...
- PMP - 控制图(质量控制工具)
这里用一个具体例子来解释什么是控制图. 假设现在工厂需要生成直径为1000mm (允许偏差为振幅4个标准差,即:±4mm)的螺丝钉.我们要如何保证生成过程的质量呢? 这时候我们应该对生成出来的产品进行 ...
- 【原创】大叔经验分享(56)hue导出行数限制
/opt/cloudera/parcels/CDH/lib/hue/apps/beeswax/src/beeswax/conf.py # Deprecated DOWNLOAD_CELL_LIMIT ...
- vue封装swiper
参考:https://github.com/surmon-china/vue-awesome-swiper npm install vue-awesome-swiper --save 全局引入 imp ...
- 【转载】linux SUID SGID
作者:sparkdev 出处:http://www.cnblogs.com/sparkdev/ setuid 和 setgid 分别是 set uid ID upon execution 和 set ...
- Caused by: java.lang.UnsatisfiedLinkError: Couldn't load 。。。。
最近需要做个有地图搜索功能的模块,用到百度地图SDK,但是从官网上下载SDK后导入工程,修改apiKey后,还是无法运行,总是抱这个错误:Caused by: java.lang.Unsatisfie ...
- axiso基本使用及python接收处理
安装$ npm install axios 1.发送get请求: axios.get("/api/v1.0/cars?id=132").then(function(res){ co ...