已经有四套题没有写博客了。今天改的比较快,就有时间写。今天这套题是用的图片的形式,传上来不好看,就自己描述吧。


第一题:单词分类

  题目大意:有n个单词(n<=10000),如果两个单词中每个字母的数量是一样的(比如:AABAC 和BCAAA)则为一类单词,每个单词长度不大于100,问这些单词可以分为几类?

  样例:输入:3  AABCA AAABC BBCAA    输出:2

  题解:

  每次都在第一题是字符串的时候卡住,这次又卡了一个多小时。。一般思路,就是枚举查找,排序,然后一个一个的比较,但是只过了一半,WA了一半。这个时候,根据每一类单词按字母序排序后都是一模一样的就可以用STL 中的set,将单词按字母序排序后存入set,最后输出 s.size() 。关键是对字符串进行排序 sort(st.begin() , st.end()) 。

  参考代码:

 #include<iostream>
#include<cstdio>
#include<set>
#include<algorithm>
using namespace std;
set<string> t;
int n;
int main()
{
freopen("word.in","r",stdin);
freopen("word.out","w",stdout);
cin>>n;
for (int i=;i<=n;i++)
{
string s;
cin>>s;
sort(s.begin(),s.end());
t.insert(s);
}
cout<<t.size();
return ;
}

第二题:过河

  题目大意:一条河,要将东岸的n个人(n<=100000)运到西岸,只有一条船,一次最多运2个人,每个人有过河的时间花费,每一次运输的花费是船上花费最高的人的花费。问总花费时间?

  样例:输入:4 (n) 6 7 10 15(每个人的花费) 输出:42

  样例说明:{1,2,3,4}->{}

        {3,4}-(1,2)->{1,2}  ans+=7

        {1,3,4}<-(1)-{2} ans+=6

        {1}-(3,4)->{2,3,4} ans+=15

        {1,2}<-(2)-{3,4} ans+=7

        {}-(1,2)->{1,2,3,4} ans+=7

  题解:

  考试的时候是想找规律来着,分为单数和偶数。但是只对了1组。。。正解:递推。先排序。对于每一次从东岸运走,有两种情况:一是将最快的那个人从西岸回来,和东岸的一个人走;二是将最快的那个人从西岸回来,东岸的两个人一起西岸,然后西岸的第二快的人回东岸,和最快的人一起再去西岸。分别对应了运单数个人和偶数个人的情况,并取最小花费(这就是为什么直接用人数的奇偶数来找规律的错误原因,实际应该在过程中就有运一个或两个人的情况,而非全部两个人)。

代码:

 #include<iostream>
#include<cstdio>
#include<algorithm>
#define inf 100005
using namespace std;
int n,a[inf],f[inf];
int main()
{
freopen("river.in","r",stdin);
freopen("river.out","w",stdout);
cin>>n;
for (int i=;i<=n;i++)
scanf("%d",&a[i]);
sort(a+,a++n);
f[]=a[];f[]=a[];
for (int i=;i<=n;i++)
{
if (f[i-]+a[]+a[i]<f[i-]+a[]+*a[]+a[i])
f[i]=f[i-]+a[]+a[i];
else f[i]=f[i-]+a[]+*a[]+a[i];
}
cout<<f[n];
return ;
}

第三题:最短路

  题目大意:一个无向图,n个点(<=3000)m条边(<=20000),给定 k个三元数组(<=100000),(a,b,c)表示a 走到b不能往c走,但是b走到a可以往c走。在这个限制下,求出从1—n的最短路径,输出长度和过程中经过的点。输入:n,m,k   下m行为联通的边,下k行是限制数组。

  样例:输入:4 4 2            输出:  4

        1 2         1 3 2 3 4

        2 3

        3 4

        1 3

        1 2 3

       1 3 4

  题解:最后写到这道题没有时间了。可以用BFS或SPFA。对于判断能不能走,标程的做法值得借鉴,将head数组定为二维,表示从a->b的b的下几条边是不能走的,在BFS中,用set存不能走的路,并在拓展时判断要走的路在不在集合中,BFS中,用自定义的队列数组,并且是二维,一个存当前节点,一个存当前节点的上一个节点。在记录路径时,用倒序,存从当前节点走到下一节点的路径的上一个节点。在搜索中,因为是BFS如果找到一条路,则为最优解,就可以退出了,加一条语句,可以避免TLE 两个组。

  代码:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<set>
#include<queue>
#define inf 40005 //双向边
#define maxn 3005
using namespace std;
int n,m,k,road[maxn][maxn],q[maxn][];
int tot,he[maxn],to[inf],ne[inf];
int toto,hed[maxn][maxn],tov[inf],nex[inf];
int vis[maxn][maxn];
void add(int a,int b)
{
tot++;to[tot]=b;ne[tot]=he[a];he[a]=tot;
}
void add2(int a,int b,int c)
{
toto++;tov[toto]=c;nex[toto]=hed[a][b];hed[a][b]=toto;
}
void bfs()
{
set<int> s;
int h=,t=;
q[][]=;q[][]=;
vis[][]=;
while (h<=t)
{
s.clear();h++;
int u=q[h][],v=q[h][];
for (int i=hed[v][u];i;i=nex[i])
s.insert(tov[i]);
for (int i=he[u];i;i=ne[i])
if (!vis[u][to[i]]&&s.find(to[i])==s.end())
{
q[++t][]=to[i];q[t][]=u;
road[u][to[i]]=v;//record the last point
vis[u][to[i]]=vis[v][u]+;//from v -> u -> to[i]
if (to[i]==n) return ;//不加 TLE 2组
}
}
}
void print(int a,int b)
{
if (a) print(road[a][b],a);
printf("%d ",b);
}
int main()
{
freopen("path.in","r",stdin);
freopen("path.out","w",stdout);
cin>>n>>m>>k;
for (int i=;i<=m;i++)
{
int a,b;
scanf("%d%d",&a,&b);
add(a,b);
add(b,a);
}
for (int i=;i<=k;i++)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
add2(a,b,c);
}
bfs();
int min=,mi;
for (int i=;i<=n;i++)
if (vis[i][n]&&vis[i][n]<min) {
min=vis[i][n];mi=i;
}
if (min==) {
cout<<-;return ;
}
cout<<min-<<endl;
print(mi,n);
return ;
}

  呼。。。刷题去

  

第46套题【STL】【贪心】【递推】【BFS 图】的更多相关文章

  1. CF822D 贪心+递推

    CF822D [题目链接]CF822D [题目类型]贪心+递推 &题意: 给你n个人,你可以把他们分组,但必须保持每组相等,分组之后每2个人会比赛,比如一组有i个人,那么就要比赛 次,f[i] ...

  2. 【51Nod】1519 拆方块 贪心+递推

    [题目]1519 拆方块 [题意]给定n个正整数,\(A_i\)表示第i堆叠了\(A_i\)个石子.每轮操作将至少有一面裸露的石子消除,问几轮所有石子均被消除.\(n \leq 10^5\). [算法 ...

  3. 【第53套模拟题】【递推】【RMQ】【二进制】【分块】

    题目:(开始自己描述题目了...) 第一题大意: 求1~n的所有排列中逆序对为k个的方案数,输出方案数%10000,n<=1000. 解:这道题一个递推,因为我基本上没怎么自己做过递推,所以推了 ...

  4. 2019 ICPC南京网络赛 F题 Greedy Sequence(贪心+递推)

    计蒜客题目链接:https://nanti.jisuanke.com/t/41303 题目:给你一个序列a,你可以从其中选取元素,构建n个串,每个串的长度为n,构造的si串要满足以下条件, 1. si ...

  5. [NOI2017]蔬菜(贪心+递推)

    这题很有思维难度,乍一看基本无从下手. 给每个蔬菜钦定退役的时间显然很困难,可以考虑让时光倒流,从后向前递推,然后就变成了某个时间点有一部分蔬菜服役,而已经服役的蔬菜不会退役了.然后就可以直接考虑贪心 ...

  6. codeforces 735C Tennis Championship(贪心+递推)

    Tennis Championship 题目链接:http://codeforces.com/problemset/problem/735/C ——每天在线,欢迎留言谈论. 题目大意: 给你一个 n ...

  7. [ 9.26 ]CF每日一题系列—— 771B递推问题

    Description: 给定你命名的规律,1-10个字符,开头必须大写,最多有50个名字,然后告诉你有n个人,判断区间长度为k,那么你将得到n - k + 1个答案(YES or NO) 表示1 - ...

  8. ARC077C pushpush 递推

    ---题面--- 题解: 貌似一般c题都是递推... 观察到最后一个插入的数一定在第一个,倒数第二个插入的数一定在倒数第一个,倒数第三个插入的数一定在第2个,倒数第四个插入的数一定在倒数第2个…… O ...

  9. HDU-1041-Computer Transformation,大数递推,水过~~

                                                                                  Computer Transformatio ...

随机推荐

  1. 进程 & 线程相关知识

    不管Java,C++都有进程.线程相关的内容.在这里统一整理吧. Python的线程,其实是伪线程,不能真正的并发.下面也有讲. 线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序 ...

  2. Android lint 删除无用图片文件和配置文件

    Android lint  删除无用.冗余的  配置文件和 图片资源    转载请注明  http://blog.csdn.net/aaawqqq?viewmode=contents Android项 ...

  3. Maven——Maven核心概念

    原文:http://www.cnblogs.com/xdp-gacl/p/4051819.html 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1. ...

  4. double 逆序

    请设计一个函数,不许用到字符串函数,用数学运算,将double类型数据转换,例如123.456转换成654.321 int _tmain(int argc, _TCHAR* argv[]) { con ...

  5. JAVA EE 第一阶段考试

    在第一阶段中我们学习了Spring Struts2 Hibernate.虽然在外面的公司中,公司项目的框架中都不在使用Struts2了.他好像出现了不可修复的bug.但是在学校,依然还是要学习这个.在 ...

  6. 转!!MAC和PHY的区别

    一块以太网网卡包括OSI(开方系统互联)模型的两个层,物理层和数据链路层.物理层定义了数据传送与接收所需要的电与光信号.线路状态.时钟基准.数据编码和电路等,并向数据链路层设备提供标准接口.数据链路层 ...

  7. linux 相关学习记录

    (一)概念① 物理CPU实际Server中插槽上的CPU个数物理cpu数量,可以数不重复的 physical id 有几个② 逻辑CPU /proc/cpuinfo 用来存储cpu硬件信息的信息内容分 ...

  8. python2 httplib 笔记

    python2  httplib 笔记 #coding=utf-8 ''' Created on 2014年9月25日 @author: cocoajin ''' import httplib,url ...

  9. 不能使用tpcc-mysql测试OneProxy

    因为Proxy类的中间件不适合实现prepared statement,所以无法测试,导致我们无法使用标准的测试工具去发布OneProxy的测试结果

  10. JavaScript开发者常忽略或误用的七个基础知识点

    JavaScript 本身可以算是一门简单的语言,但我们也不断用智慧和灵活的模式来改进它.昨天我们将这些模式应用到了 JavaScript 框架中,今天这些框架又驱动了我们的 Web 应用程序.很多新 ...