TOP CODER SRM 611 DIV2

250:

很水的题,写的比较暴力,有效率更高的解法。

#include <string>
#include <memory.h>
using namespace std;


class InterestingNumber
{
public:
string isInteresting(string x)
{
int len = x.length();
bool visit[100];
memset(visit, 0, sizeof(visit));
for(int i = 0; i < len; i++)
{
if(visit[i])
continue;
char s = x[i];
int end, count = 0;
for(int j = i + 1; j < len; j++)
{
if(x[j] == s)
{
end = j;
count++;
}
}
if(count != 1)
return "Not interesting";
if(end - i - 1 != s - '0')
return "Not interesting";
visit[end] = 1;
}
return "Interesting";
}
};


500:

只需要考虑能被x整除的数,而且如果x是其中几个数的最小公倍数,那x必然是这所有能被它整除的数的最小公倍数。因此直接对这些数求最小公倍数即可。

#include <stdio.h>
#include <vector>
#include <string>
using namespace std;


class LCMSetEasy
{
public:
string include(vector<int> S, int x)
{
int temp = 1;
bool found = false;
for(int i = 0; i < S.size(); i++)
{
if(x % S[i] == 0)
{
found = true;
printf("S[i]:%d\n", S[i]);
temp = lcm(S[i], temp);
printf("LCM:%d\n", temp);
if(temp == x)
return "Possible";


}
}
printf("%d\n", temp);
if(found && temp == x)
return "Possible";
else
return "Impossible";
}




private:
int gcd(int a, int b)
{
if(a < b)
return gcd(b, a);
if(b == 0)
return a;
return gcd(b, a % b);
}


int lcm(int a, int b)
{
return a / gcd(a, b) * b;
}


};


1000:

比较简单,我从格子的角度出发,对每一个格子搜索它可能对应的大象,分上、下、左、右四个方向,写的较为复杂。其实从大象的角度出发寻找对应的格子,即直线上最近的那个格子,会更加简洁。

#include <vector>
#include <string>
#include <stdio.h>
#include <memory.h>
using namespace std;


class ElephantDrinkingEasy
{
public:
int maxElephants(vector <string> map)
{
memset(visit, 0, sizeof(visit));
result = 0;
row = map.size();
column = map[0].length();
eleCnt = 4 * column;
waterCnt = 0;
buildGraph(map);
for(int i = 0; i <= row + 1; i++)
{
for(int j = 0; j <= column + 1; j++)
{
printf("%c", graph[i][j]);
}
printf("\n");
}
dfs(1, 1, 0);
return result;
}
private:
void dfs(int r, int c, int count)
{
if(result == eleCnt || result == waterCnt)
return;
if(r > row)
return;
if(c > column)
{
dfs(r + 1, 1, count);
return;
}



if(!visit[r][c] && graph[r][c] == 'Y')
{
bool flag = false;
// if(count == 3 && r == 2 && c == 1)
// {
// printf("count == 3:\n");
// for(int i = 0; i <= row + 1; i++)
// {
// for(int j = 0; j <= column + 1; j++)
// {
// printf("%d", visit[i][j]);
// }
// printf("\n");
// }
// }
//向上
for(int i = r - 1; i >=0; i--)
{
if(visit[i][c] || graph[i][c] == 'Y')
{
flag = true;
break;
}
}
if(!flag)
{
// if(r == 2 && c == 1 && count == 3)
// {
// printf("up error\n");
// }
for(int i = r; i >= 0; i--)
{
visit[i][c] = 1;
}
if(count + 1 > result)
{
result = count + 1;
}
dfs(r, c + 1, count + 1);
for(int i = r; i >= 0; i--)
{
visit[i][c] = 0;
}


}


//向右
flag = false;
for(int i = c + 1; i <= column + 1; i++)
{
if(visit[r][i] || graph[r][i] == 'Y')
{
flag = true;
break;
}
}
if(!flag)
{
// if(r == 2 && c == 1 && count == 3)
// {
// printf("right error\n");
// }
for(int i = c; i <= column + 1; i++)
{
visit[r][i] = 1;
}
if(count + 1 > result)
{
result = count + 1;
}
dfs(r, c + 1, count + 1);
for(int i = c; i <= column + 1; i++)
{
visit[r][i] = 0;
}
}


//向下
flag = false;
for(int i = r + 1; i <= row + 1; i++)
{
if(visit[i][c] || graph[i][c] == 'Y')
{
flag = true;
break;
}
}
if(!flag)
{
// if(r == 2 && c == 1 && count == 3)
// {
// printf("yes\n");
// }
for(int i = r; i <= row + 1; i++)
{
visit[i][c] = 1;
}
if(count + 1 > result)
{
result = count + 1;
}
dfs(r, c + 1, count + 1);
for(int i = r; i <= row + 1; i++)
{
visit[i][c] = 0;
}
}


//向左
flag = false;
for(int i = c - 1; i >= 0; i--)
{
if(visit[r][i] || graph[r][i] == 'Y')
{
flag = true;
break;
}
}
if(!flag)
{
for(int i = c; i >= 0; i--)
{
visit[r][i] = 1;
}
if(count + 1 > result)
{
result = count + 1;
}
dfs(r, c + 1, count + 1);
for(int i = c; i >= 0; i--)
{
visit[r][i] = 0;
}
}


}
dfs(r, c + 1, count);
}


void buildGraph(std::vector<string> map)
{
memset(graph, '0', sizeof(graph));
for(int i = 0; i < map.size(); i++)
{
for(int j = 0; j < map[i].length(); j++)
{
graph[i + 1][j + 1] = map[i][j];
if(graph[i + 1][j + 1] == 'Y')
{
waterCnt++;
}
}
}
}


private:
bool visit[10][10];
char graph[10][10];
int result;
int row;
int column;
int eleCnt;
int waterCnt;
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值