2018-2-6考试(COCI2014/2015 Contest#5)
T1:FUNGHI(1s,32M,50pts)得分:50
题意:给你8个数组成一个环,要你求出其中连续的4个数,让它们的和最大
题解:暴力求出每一连续4个数之和,比较一下就好
标签:模拟
C++ Code:
#include<cstdio>
using namespace std;
int s[10],ans,maxn;
int main(){
freopen("FUNGHI.in","r",stdin);
freopen("FUNGHI.out","w",stdout);
for (int i=0;i<8;i++)scanf("%d",&s[i]);
for (int i=0;i<8;i++){
ans=0;
for (int j=0;j<4;j++)ans+=s[(i+j)%8];
if (ans>maxn)maxn=ans;
}
printf("%d\n",maxn);
return 0;
}
T2:ZMIJA(1s,32M,80pts)得分:80
题意:给你一个n*m的矩阵,有一条蛇在左下角(用“Z”表示),有一些苹果(用“J”表示)和空格(用“.”表示)。有两个操作,A:让蛇向它面朝的方向走一步(不可以走出矩阵),B:让蛇向上走一步,并且转向180°(左变右,右变左)。现在它面向右,让你求出最小操作几次使得蛇吃完所有的苹果。
题解:分析每一行,如果((n-i+1)&1)(在从下到上的奇数行,即面向右),为了吃完这一行所有苹果,到这一行时必须到这一行最左边的苹果的左边(或相同);如果是偶数行,就必须到这一行最右边的苹果的右边(或相同)。满足这就可以保证吃完苹果。为了操作数最少,如果可以的话就刚好到达最左或右的苹果(即在吃完苹果的前提下不多走路)。注意,如果上面几行是空行,就不必上去,不然操作数会多
标签:模拟,贪心
C++ Code:
#include<cstdio>
using namespace std;
int n,m,ans,tmp,x=1,tmp6;
char ch[1010];
bool s[1010][1010],pd,yes=1;
int main(){
freopen("ZMIJA.in","r",stdin);
freopen("ZMIJA.out","w",stdout);
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++){
scanf("%s",ch);
pd=1;
for (int j=1;j<=m;j++){
s[i][j]=ch[j-1]=='J';
if (s[i][j])pd=0;
}
if (pd&&yes)tmp6++;
else yes=0;
}
for (int i=n;i;i--){
if ((n-i+1)&1){
tmp=x;
for (int j=x+1;j<=m;j++)if (s[i][j])tmp=j;
ans+=tmp-x;
x=tmp;
}else{
tmp=x;
for (int j=x-1;j;j--)if (s[i][j])tmp=j;
ans+=x-tmp;
x=tmp;
}
if (i==1)break;
if ((n-i)&1){
for (int j=1;j<x;j++)if (s[i-1][j]){
ans+=x-j;
x=j;
break;
}
}else{
for (int j=m;j>x;j--)if (s[i-1][j]){
ans+=j-x;
x=j;
break;
}
}
ans++;
}
if (yes){
puts("0");
return 0;
}
printf("%d\n",ans-tmp6);
return 0;
}
T3:TRAKTOR(2s,32M,100pts)得分:100
题意:平面上有n个整点,问最小的i满足前i个点中已经出现k点共线(这里的线只可以平行与坐标轴或者成45°),无解输出-1
题解:维护4个数组,分别记录这一行、这一列、左上到右下的对角线、左下到右上的对角线,每读进一个蘑菇的坐标就维护一下这些数组,看最早什么时候值大于等于k
标签:模拟,数论
C++ Code:
#include<cstdio>
using namespace std;
int n,k;
int h[100010],l[100010],x[200020],y[200020];
int main(){
freopen("TRAKTOR.in","r",stdin);
freopen("TRAKTOR.out","w",stdout);
scanf("%d%d",&n,&k);
if (n<1){
puts("-1");
return 0;
}
if (k==0){
puts("0");
return 0;
}
for (int i=1;i<=n;i++){
int a,b;
scanf("%d%d",&a,&b);
h[a]++;
l[b]++;
if ((h[a]>=k)||(l[b]>=k)){
printf("%d\n",i);
return 0;
}
x[a+b]++;
y[a-b+100010]++;
if ((x[a+b]>=k)||(y[a-b+100010]>=k)){
printf("%d\n",i);
return 0;
}
}
puts("-1");
return 0;
}
T4:ZGODAN(1s,32M,120pts)得分:120
题意:给你一个数N(N≤10^1000),询问离它最近的美丽数(美丽数定义:这个数中,任意两个相邻的数字奇偶性不同),如果有两个美丽数距离N一样,先输出小的,再输出大的
题解:发现找到第一个奇偶性不同的数,然后把它+1或-1。如果+1,后面的数为0101……或1010……(根据奇偶性决定);如果-1,后面的数为8989……或9898……(根据奇偶性决定)。然后判断一下这两个和原数差的大小即可。注意,如果+1或-1后不在0~9内就不用判断,因为这样会改变前一个数的奇偶性,差一定比另一个数大
标签:数论,高精度
C++ Code:
#include<cstdio>
#include<cstring>
using namespace std;
char s[1010];
bool pd=0,bb=1,cc=1;
int a[1010],b[1010],c[1010],d[1010],e[1010],len;
void jian(int *a,int *b,int *c){
int tmp=0;
for (int i=len-1;i;i--){
c[i]=a[i]-b[i]-tmp;
if (c[i]<0)c[i]+=10,tmp=1;
else tmp=0;
}
}
int bj(int *a,int *b){
for (int i=0;i<len;i++)if (a[i]!=b[i])if (a[i]<b[i])return 0;else return 1;
return -1;
}
void work(){
jian(a,b,d);
jian(c,a,e);
int tmp=bj(d,e);
// for (int i=0;i<len;i++)printf("%d",b[i]);
// putchar(' ');
// for (int i=0;i<len;i++)printf("%d",c[i]);
// putchar('\n');
if (tmp==1){
for (int i=0;i<len;i++)printf("%d",c[i]);
putchar('\n');
}else{
if (tmp==0){
for (int i=0;i<len;i++)printf("%d",b[i]);
putchar('\n');
}else{
for (int i=0;i<len;i++)printf("%d",b[i]);
putchar(' ');
for (int i=0;i<len;i++)printf("%d",c[i]);
putchar('\n');
}
} return;
}
int main(){
freopen("ZGODAN.in","r",stdin);
freopen("ZGODAN.out","w",stdout);
scanf("%s",s);len=strlen(s);
for (int i=0;i<len;i++)a[i]=s[i]^48;
b[0]=c[0]=a[0];
for (int i=1;i<len;i++){
if (pd){
if (bb){
if (b[i-1]&1)b[i]=8;
else b[i]=9;
}
if (cc){
if (c[i-1]&1)c[i]=0;
else c[i]=1;
}
}
if (!pd){
b[i]=c[i]=a[i];
if ((a[i]&1)==(a[i-1]&1)){
pd=1;
b[i]=a[i]-1;
c[i]=a[i]+1;
if (b[i]==-1)bb=0;
if (c[i]==10)cc=0;
}
}
}
if (!bb){
for (int i=0;i<len;i++)printf("%d",c[i]);
putchar('\n');
return 0;
}
if (!cc){
for (int i=0;i<len;i++)printf("%d",b[i]);
putchar('\n');
return 0;
}
work();
return 0;
}
T5:JABUKE(2s,128M,140pts)得分81
题意:给你一个n*m的矩阵,其中有苹果树(用“x”表示)和空地(用“.”表示),有G(1<=G<=10^5)年,每年会掉一个苹果,要你求出每年距该苹果最近的一棵苹果树的距离的平方,每个苹果第二年都会变成苹果树
题解:用p[i][j]存第j列到第i行中最近的苹果树的距离,每发现一棵苹果数就维护一下p数组(就维护这一行的p)。针对每个询问,枚举每一行,看离询问的那一列最近的距离(因为更远的苹果树到该点距离一定比现在的远),更新答案。
标签:数论,贪心
C++ Code:
原:
#include<cstdio>
using namespace std;
int n,m,num,T,minn,ans;
char ch[600];
int s[250100][2];
int main(){
freopen("JABUKE.in","r",stdin);
freopen("JABUKE.out","w",stdout);
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++){
scanf("%s",ch);
for (int j=1;j<=m;j++)if (ch[j-1]=='x')s[++num][0]=i,s[num][1]=j;
}
scanf("%d",&T);
while (T--){
int a,b;
scanf("%d%d",&a,&b);
s[++num][0]=a;s[num][1]=b;
minn=2147483647;
for (int i=1;i<num;i++){
ans=0;
int x=s[i][0]-s[num][0],y=s[i][1]-s[num][1];
ans=x*x+y*y;
if (ans<minn)minn=ans;
}
printf("%d\n",minn);
}
return 0;
}
正确:
#include<cstdio>
using namespace std;
int n,m,num,T,minn,ans,x,y;
char ch[600];
int s[250100][2],p[510][510];
inline int abs(int a){return a>0?a:-a;}
int main(){
freopen("JABUKE.in","r",stdin);
freopen("JABUKE.out","w",stdout);
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++){
scanf("%s",ch);
for (int j=1;j<=m;j++)p[i][j]=600;
for (int j=1;j<=m;j++){
if (ch[j-1]=='x'){
x=i,y=j;
for (int l=1;l<=m;l++){
int a=abs(y-l);
if (p[x][l]>a)p[x][l]=a;
}
}
}
}
scanf("%d",&T);
while (T--){
scanf("%d%d",&x,&y);
minn=2147483647;
for (int i=1;i<=n;i++){
int a=p[i][y],b=i-x;
ans=a*a+b*b;
if (ans<minn)minn=ans;
if (!minn)break;
}
for (int i=1;i<=m;i++){
int a=abs(y-i);
if (p[x][i]>a)p[x][i]=a;
}
printf("%d\n",minn);
}
return 0;
}
T6:DIVLJAK(4s,768M,160pts)得分:50
题意:给你多个模式串,要求支持动态增加询问串和询问某个模式串是多少询问串的子串
题解:略
标签:略
C++ Code:
原:
#include<cstdio>
#include<iostream>
using namespace std;
int n,m,s[100010];
string p[100010],tmp;
int main(){
ios::sync_with_stdio(false);
freopen("DIVLJAK.in","r",stdin);
freopen("DIVLJAK.out","w",stdout);
cin >> n;
for (int i=1;i<=n;i++)cin >> p[i];
cin >> m;
while (m--){
int op,o;
cin >> op;
if (op==1){
cin >> tmp;
for (int i=1;i<=n;i++)if (tmp.find(p[i])!=-1)s[i]++;
// printf("Debug:%d\n",tmp.find(p[1]));
}else{
cin >> o;
cout << s[o] << endl;
}
}
return 0;
}
正确:
略
2018-2-6考试(COCI2014/2015 Contest#5)的更多相关文章
- COCI2014/2015 Contest#1 D MAFIJA【基环树最大独立点集】
T1725 天黑请闭眼 Online Judge:COCI2014/2015 Contest#1 D MAFIJA(原题) Label:基环树,断环+树形Dp,贪心+拓扑 题目描述 最近天黑请闭眼在 ...
- C++算法代码——求数列[coci2014/2015 contest #1]
题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1815 题目描述 Mirko在数学课上以一种有趣的方式操作数列,首先,他写下一个数列A ...
- The 2018 ACM-ICPC China JiangSu Provincial Programming Contest快速幂取模及求逆元
题目来源 The 2018 ACM-ICPC China JiangSu Provincial Programming Contest 35.4% 1000ms 65536K Persona5 Per ...
- The 2018 ACM-ICPC China JiangSu Provincial Programming Contest J. Set
Let's consider some math problems. JSZKC has a set A=A={1,2,...,N}. He defines a subset of A as 'Meo ...
- The 2018 ACM-ICPC China JiangSu Provincial Programming Contest I. T-shirt
JSZKC is going to spend his vacation! His vacation has N days. Each day, he can choose a T-shirt to ...
- Bayan 2015 Contest Warm Up D题(GCD)
D. CGCDSSQ time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...
- 2018.09.28 牛客网contest/197/C期望操作数(状态转移+前缀和递推)
传送门 比赛手动打了四项感觉有规律,调了40min+之后重新手算了后面几项发现只有前四项满足规律233. 首先这道题只跟q−xq-xq−x有关. 我们尝试找找递推关系. 我们令f[i]f[i]f[i] ...
- 2018.09.28 牛客网contest/197/B面积并(二分+简单计算几何)
传送门 比赛的时候把题目看成求面积交了,一直没调出来. 下来发现是面积并气的吐血. 码了一波发现要开long double. 然而直接用现成的三角函数会挂. 因此需要自己手写二分求角度. 大致思路就是 ...
- 2018.09.28 牛客网contest/197/A因子(唯一分解定理)
传送门 比赛的时候由于变量名打错了调了很久啊. 这道题显然是唯一分解定理的应用. 我们令P=a1p1∗a2p2∗...∗akpkP=a_1^{p_1}*a_2^{p_2}*...*a_k^{p_k}P ...
随机推荐
- php GD 圆图 -处理成圆图片
<?php /** * 处理成圆图片,如果图片不是正方形就取最小边的圆半径,从左边开始剪切成圆形 * @param string $imgpath [description] * @return ...
- phpstorm代码提示不小心关了,如何开启
在phpstrom右下角单击如图 出现event log窗口 如果不是 单击切换取消节电模式即可开启代码提示.
- STM32(3)——外部中断的使用
1 .简介 ARM Coetex-M3内核共支持256个中断,其中16个内部中断,240个外部中断和可编程的256级中断优先级的设置.STM32目前支持的中断共84个(16个内部+68个外部),还有1 ...
- ctf题目writeup(6)
2019.2.2 依旧是bugku上面的题目,地址:https://ctf.bugku.com/challenges 1. 解压后是60多个out.zip,都是真加密,里面都是1kb的data.txt ...
- WHERE条件中or与union引起的全表扫描的问题
说起数据库的SQL语句执行效率的问题,就不得不提where条件语句中的or(逻辑或)引起的全表扫描问题,从而导致效率下降. 在以往绝大多数的资料中,大多数人的建议是使用 union 代替 or ,以解 ...
- redhat6.5安装oracle 11g
1.修改操作系统核心参数 在Root用户下执行以下步骤: 1)修改用户的SHELL的限制,修改/etc/security/limits.conf文件 输入命令:vi /etc/security/lim ...
- LeetCode 二叉树的层次遍历 C++
给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其层 ...
- spfa专题
SPFA专题 1通往奥格瑞玛的道路 在艾泽拉斯,有n个城市.编号为1,2,3,...,n. 城市之间有m条双向的公路,连接着两个城市,从某个城市到另一个城市,会遭到联盟的攻击,进而损失一定的血量. 每 ...
- webpack入门概念
一 概念 1 入口(entry) 入口起点(entry point)提示webpack 应该使用那个模块,来作为构建其内部依赖图得开始.进入入口七点后,webpack 会找出那些模块和库是入口起点(直 ...
- 形象的理解Strong和Weak
Strong Weak