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)的更多相关文章

  1. COCI2014/2015 Contest#1 D MAFIJA【基环树最大独立点集】

    T1725 天黑请闭眼 Online Judge:COCI2014/2015 Contest#1 D MAFIJA(原题) Label:基环树,断环+树形Dp,贪心+拓扑 题目描述 最近天黑请闭眼在 ...

  2. C++算法代码——求数列[coci2014/2015 contest #1]

    题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1815 题目描述 Mirko在数学课上以一种有趣的方式操作数列,首先,他写下一个数列A ...

  3. The 2018 ACM-ICPC China JiangSu Provincial Programming Contest快速幂取模及求逆元

    题目来源 The 2018 ACM-ICPC China JiangSu Provincial Programming Contest 35.4% 1000ms 65536K Persona5 Per ...

  4. 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 ...

  5. 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 ...

  6. 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 ...

  7. 2018.09.28 牛客网contest/197/C期望操作数(状态转移+前缀和递推)

    传送门 比赛手动打了四项感觉有规律,调了40min+之后重新手算了后面几项发现只有前四项满足规律233. 首先这道题只跟q−xq-xq−x有关. 我们尝试找找递推关系. 我们令f[i]f[i]f[i] ...

  8. 2018.09.28 牛客网contest/197/B面积并(二分+简单计算几何)

    传送门 比赛的时候把题目看成求面积交了,一直没调出来. 下来发现是面积并气的吐血. 码了一波发现要开long double. 然而直接用现成的三角函数会挂. 因此需要自己手写二分求角度. 大致思路就是 ...

  9. 2018.09.28 牛客网contest/197/A因子(唯一分解定理)

    传送门 比赛的时候由于变量名打错了调了很久啊. 这道题显然是唯一分解定理的应用. 我们令P=a1p1∗a2p2∗...∗akpkP=a_1^{p_1}*a_2^{p_2}*...*a_k^{p_k}P ...

随机推荐

  1. 【c学习-7】

    #include /*#include"test31.c"*/ //定义阶乘函数 /* int fac(int n){ //定义寄存器存储变量 register int i ,f= ...

  2. JS高级. 01 复习JS基础

    1. JavaScript 包含: ____, ____, 和 ____. 2. JavaScript 的基本类型有 ____, ____, 和 ____. 3. JavaScript 的复合类型有 ...

  3. Vue使用json-server来进行后端数据模拟

    正开发过程中 前后端分离或者不分离 ,接口多半是之后与页面的开发 ,所以建立rest的APL的接口 给前端提供虚拟的数据是非常必要的 所以这里我使用了json-server作为工具,支持CORS和JS ...

  4. 深入了解jQuery Mobile-3装载器

    介绍 当jQuery Mobile通过Ajax加载内容或用于自定义通知时,会显示一个小的加载叠加层. 标准loader $( document ).on( "click", &qu ...

  5. (数据科学学习手札17)线性判别分析的原理简介&Python与R实现

    之前数篇博客我们比较了几种具有代表性的聚类算法,但现实工作中,最多的问题是分类与定性预测,即通过基于已标注类型的数据的各显著特征值,通过大量样本训练出的模型,来对新出现的样本进行分类,这也是机器学习中 ...

  6. (数据科学学习手札10)系统聚类实战(基于R)

    上一篇我们较为系统地介绍了Python与R在系统聚类上的方法和不同,明白人都能看出来用R进行系统聚类比Python要方便不少,但是光介绍方法是没用的,要经过实战来强化学习的过程,本文就基于R对2016 ...

  7. abap<itab>refresh,clear,free

    在ABAP开发过程中,clear,refresh,free都有用来清空内表的作用,但用法还是有区别的. clear itab,清空内表行以及工作区,但保存内存区. clear itab[],清空内表行 ...

  8. OpenCV代码提取: threshold函数的实现

    threshold algorithm: The simplest image segmentation method. All thresholding algorithms take a sour ...

  9. P1196 银河英雄传说(加权并查集)

    P1196 银河英雄传说 题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦 创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在 ...

  10. exchange 2007迁移到2010

    标签:exchange 2007 2010 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://zpf666.blog.51cto.c ...