文章目录
总结
写在前面:
今天考试,我整的太白给了, T 1 T1 T1了解错误, T 2 T2 T2暴力整活返回错误, T 3 T3 T3推出状态转移方程后不会打~~(其实是懒得写😏😏😏)~~
T 4 T4 T4开小数组,总的来说:就是白给,没有办法的。(还有,以后总结我统统加粗,别管,我喜欢😜😜😜)
以后考试还是要细心才行啊~~
不多讲了,整活!
T 1 T1 T1【克罗地亚】INSTRUKCIJE
题目描述:
小马克今年成为小学生。不久后她将进行她的第一次考试,其中包括数学考试。她非常认真地复习,她认为自己已经准备好了。她的哥哥通过给她提出问题并解决的方式帮助她。他写下许多问题,其中一个问题是由一连串整齐的数字组成,比如1个1,2个2,3个 3 等等。现在他给马克两个整数A和B;她的任务是找出由这两数描述的数列的和。如果A是1,B是3,答案为1+2+2=5。
写一个程序,然后计算它们的和,马克的哥哥能够验证答案正确与否。
正解:
其实很简单,就是一个暴力题,但注意:
A是第几个数字!不是第一个数字是什么!(我就是被这个坑了)
#include<bits/stdc++.h>
#define MAX 2*1e9
#define MIN -2*1e9
using namespace std;
int sum;
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=1; ; i++)
{
for(int j=1; j<=i; j++)
{
sum+=i;
m--;
n--;
if(n==1) sum=0;
if(m==0) break;
}
if(m==0) break;
}
printf("%d",sum);
return 0;
}
就是那么简单!🍳🍳🍳
T 2 T2 T2【克罗地亚】LAGNO
题目描述:
Lagno(西班牙和奥赛罗)是一种二人智力游戏。游戏设有一个黑方和一个白方。游戏桌面是正方形的,包含8行8列。如果黑方玩家走出这样一部棋:将一枚黑子放在任一空格上,而在这个空格的八个方向(上、下、左、右和4个对角线方向)的至少一个方向上有一排白子被夹在这枚新下的黑子和其他黑子之间,任何方向,这排被新旧黑子包夹的所有的白子都要变成黑子(注意:1、被包夹有白子之间没有空格才能变;2、不能连环变,即刚变黑色的棋子不能再变色周围的棋子)。
为这个游戏设计一个程序,计算一步棋中黑方能转变的白子数量的最大值。
正解:
还是很简单,就是一个**“普通”**的暴力,只需判断与白棋相连的空格,又没有贴着白棋,白棋有没有被夹着就轻轻松松粗来答案啦!只是一个小暴力而已,干嘛害怕?
上~~代码!!!!!!!!
#include<bits/stdc++.h>
#define MAX 2*1e9
#define MIN -2*1e9
using namespace std;
char a[9][9];
int zf[8][2]={{0,1},{0,-1},{1,0},{-1,0},{1,-1},{1,1},{-1,-1},{-1,1}};
int ans;
int maxn=MIN;
int yd(int z,int x,int y)
{
if(x<1||x>8||y<1||y>8||a[x][y]=='.') return MIN;
if(a[x][y]=='B') return 0;
return yd(z,x+zf[z][0],y+zf[z][1])+1;
}
int main()
{
for(int i=1; i<=8; i++)
{
for(int j=1; j<=8; j++)
scanf("%c",&a[i][j]);
getchar();
}
for(int i=1; i<=8; i++)
{
for(int j=1; j<=8; j++)
{
for(int k=1; k<=8; k++)
{
if(a[i][j]=='.')
{
int sum=yd(k,i+zf[k][0],j+zf[k][1]);
if(sum>0) ans+=sum;
}
}
maxn=max(maxn,ans);ans=0;
}
}
printf("%d",maxn);
}
过!🍳🍳🍳!
T 3 T3 T3【克罗地亚】NIKOLA
题目描述:
Nikola现在已经成为一个游戏里的重要人物。这个游戏是由一行N个方格,N个方格用1到N的数字表示。Nikola开始是在1号位置,然后能够跳到其他的位置,Nikola的第一跳必须跳到2号位置。随后的每一跳必须满足两个条件:
1、如果是向前跳,必须比前面一跳远一个方格。
2、如果是向后跳,必须和前面一跳一样远。
比如,在第一跳之后(当在2号位置时),Nikola能够跳回1号位置,或者向前跳到4号位置。
每次他跳入一个位置,Nikola必须付费。Nikola的目标是从一号位置尽可能便宜地跳到N号位置。
写一个程序,看看Nikola跳到N号位置时最小的花费。
正解:
一个线性DP,我们可以用 f i , j f_{i,j} fi,j来表示,其中i表示在第几个格子,j表示跳的距离。
我们通过题目,就可以用
f
i
,
j
f_{i,j}
fi,j来存储钱数,因为要最小,所以我们就可以列出状态转移方程(高大上!!!😲😲😲)
f
i
,
j
=
min
(
f
i
,
j
,
f
i
,
i
+
j
+
a
j
)
;
f
i
,
j
=
min
(
f
i
,
j
,
f
i
−
1
,
i
−
j
+
a
j
)
;
f_{i,j}=\min(f_{i,j},f_{i,i+j}+a_j); \\ f_{i,j}=\min(f_{i,j},f_{i-1,i-j}+a_j);
fi,j=min(fi,j,fi,i+j+aj);fi,j=min(fi,j,fi−1,i−j+aj);
#include<bits/stdc++.h>
#define MAX 2*1e9
#define MIN -2*1e9
using namespace std;
int a[20025],f[2005][2005];
int n,ans=MAX;
int main()
{
memset(f,127,sizeof(f));
scanf("%d",&n);
for(int i=1; i<=n; ++i)scanf("%d",&a[i]);
f[0][1]=0;
for(int i=1; i<=n; ++i)
{
for(int j=n; j>=1; j--)
{
f[i][j]=min(f[i][j],f[i][i+j]+a[j]);
f[i][j]=min(f[i][j],f[i-1][j-i]+a[j]);
}
ans=min(ans,f[i][n]);
}
printf("%d",ans);
return 0;
}
🍳🍳🍳,过!!!
T 4 T4 T4【克罗地亚】pjesma
题目描述:
“Guess the song” 是一项在克罗地亚的年轻程序员中非常流行的游戏。它是一种集技能、智慧、耐性于一体的游戏。这个游戏给玩游戏的人放音乐,游戏者的目标是竟可能快地猜这首歌的歌名。Mirko可能不是一个很好的程序员,但他是一个世界级的猜歌者。Mirko总是在专辑里的某首歌播放出至少一半歌词的时候猜出歌名。所有歌名的单词是唯一的(没有一个单词会出现一次或更多次)。
写一个程序,给出歌名和专辑名,看看Mirko在这首歌的哪个点上(在多少个单词之后)猜出歌名。
正解:
直接暴力,没有任何套路。
但注意:重复的不算!!!!
每句歌词只能算一次!!!!!
#include<bits/stdc++.h>
#define MAX 2*1e9
#define MIN -2*1e9
using namespace std;
char a[51][101];
char b[10001][101];
int zt[10001];
int main()
{
int n,m;
scanf("%d",&n);
for(int i=1; i<=n; i++)
scanf("%s",a[i]);
int ans,sum=n/2+n%2;
bool flag=true;
scanf("%d",&m);
for(int i=1; i<=m; i++)
{
scanf("%s",b[i]);
if(flag)
{
for(int j=1; j<=n; j++)
{
if(strcmp(a[j],b[i])==0&&zt[j]==0)
{
sum--;
zt[j]=1;
break;
}
}
}
if(sum==0)
{
ans=i;
flag=false;
sum=1;
}
}
printf("%d",ans);
return 0;
}
写在最后:
今天的考试算是漏洞百出,以后绝不能那么粗心,争取考得更好!也告诫大家一定要细心答题。
(B组的题有一些难,等我到时候再打!)
拜拜!!!