备战天梯赛第一场 题解
by fengyuming233
A HDU5702 结构体排序
一个很基本的简单的知识点,不会请自行百度
#include
#include
#include
#include
#include
#include
#define each(a,b,c) for(int a=b;a<=c;a++)//宏定义 简化for循环
#define de(x) cout<<#x<<" "<<(x)< b.num;
}
int main()
{
int T;
scanf("%d", &T);
while (T--)
{
int n;
scanf("%d", &n);
each(i, 1, n)
{
scanf("%s", a[i].color);
scanf("%d", &a[i].num);
}
sort(a + 1, a + 1 + n, cmp);
each(i, 1, n)
{
printf("%s", a[i].color);
if (i == n)printf("\n");//注意输出格式,最后一个是回车,其他都是空格
else printf(" ");
}
}
}
B HDU1034 沙雕模拟题
这种模拟题很受天梯赛的待见啊,毕竟不用看着模板敲,着重练习这类题
#include
#include
#include
#include
#include
#include
#define each(a,b,c) for(int a=b;a<=c;a++)
#define de(x) cout<<#x<<" "<<(x)<
C HDU1412 set的简单实用
STL是重要的工具,请务必学会set map priority queue stack vector的用法
点我进行学习
int main()
{
int a,b;int num;
while(scanf("%d%d",&a,&b)!=EOF)
{
sets;
while(a--)
{
cin>>num;
s.insert(num);
}
while(b--)
{
cin>>num;
s.insert(num);
}
set::iterator it;
int cnt=s.size();
for(it=s.begin();it!=s.end();it++){
printf("%d",*it);
if(cnt-->1)
printf(" ");
}
puts("");
}
}
D CF1077B 贪心
此题目标在于消灭101这样的序列,所以你从左到右扫描时,如果发现101的序列,你只能立即破坏它,消去1个1,如果你消去左边的1,那么不会对后面的序列造成任何影响,如果你消去右边的1,就可能破坏了右边的一个新的101序列,所以每次发现101序列时将其转化为100,就可以使利益最大化
贪心也有可能考到
#define _CRT_SBCURE_NO_DEPRECATE
#include
#include
E HDU2084 数塔 教科书上的动态规划例题
自底向上选择两个儿子中的较大的即可
#include
#include
#include
#include
#include
#include
using namespace std;
int a[101][101],d[101][101];
int main()
{
int t,l,i,j;
scanf("%d",&t);
while(t--){
memset(d,0,sizeof(d));
scanf("%d",&l);
for(i=1;i<=l;i++)
for(j=1;j<=i;j++)
scanf("%d",&a[i][j]);
for(i=1;i<=l;i++)
d[l][i]=a[l][i];
for(i=l-1;i>=1;i--)
for(j=1;j<=i;j++){
d[i][j]=a[i][j]+max(d[i+1][j],d[i+1][j+1]);
}
printf("%d\n",d[1][1]);
}
return 0;
}
F 搜索 mdPOJ崩了没法测试不过应该没有写错
注意方向的写法 visit数组的应用 每轮注意清空visit数组并把全局变量cnt置0
如果没有超界 没有撞墙,则可以继续dfs
#include
#include
#include
#include
#include
#include
#include
#define each(a,b,c) for(int a=b;a<=c;a++)
#define de(x) cout<<#x<<" "<<(x)<= 1 && nx <= n && ny >= 1 && ny <= m && !vis[nx][ny])
{
dfs(nx, ny);
}
}
return;
}
int main()
{
while (scanf("%d%d", &m, &n) != EOF&&(m||n)) {
cnt = 0;
getchar();//吃掉那个回车
memset(vis, 0, sizeof(vis));
int sx, sy;
each(i, 1, n)
{
each(j, 1, m)
{
scanf("%c", &a[i][j]);
if (a[i][j] == '@')
{
sx = i;
sy = j;
}
}
getchar();//注意去掉空格
}
dfs(sx, sy);
printf("%d\n", cnt);
/*
each(i, 1, n)
{
each(j, 1, m)
{
printf("%c", a[i][j]);
}
printf("\n");
}*/
}
return 0;
}
这场比赛十分经典,再刷新题之前,不会的题目一定要弄懂,一定要亲手AC!!!
加油!为我吉争光!