钟长者P71解题报告
T1
【题目描述】
给你N个字符串,你每次可以选择其中一个字符串的一段前缀进行翻转,但是你必须保证这个前缀的长度是偶数。你可以进行无限次这样的操作,并且如果
两个字符串变得相同的时候,你就可以把这两个字符串都删除掉,问最后最少剩下多少个字符串?
【输出格式】
对于每组数据,一行一个整数代表答案。
【样例输入】
2
5
esprit
god
redotopc
odcpoter
dog
14
rats
live
stressed
to
act
as
star
desserts
of
evil
cat
sa
fo
ot
【样例输出】
3
0
【样例解释】
无。
【数据范围与规定】
对于40%的数据,字符串长度不超过8
对于100%的数据,1<=T<=11,字符串长度不超过50,1<=N<=50
#include <cstdio>
#include <cstring>
char s[][];
int t,n,ans,len[];
bool vis[][],del[]; inline void work(int x)
{
len[x]=strlen(s[x]);
--len[x];//长度若是单数,那么下面枚举到最后时会出现vis[负数]=true
for(int i=;i<len[x];i+=)
vis[x][s[x][i]-'a'+s[x][i+]-'a']=true;
++len[x];
} inline bool judge(int i,int j)
{
for(int k=;k<;++k)
if(vis[i][k]!=vis[j][k])
return false;
// printf("\n%s %s\n",s[i],s[j]);
if(len[i]&)
return s[i][len[i]-]==s[j][len[j]-];
return true;
} inline void clear()
{
ans=;
memset(vis,false,sizeof vis);
memset(del,false,sizeof del);
} int main()
{
freopen("kahuucino.in","r",stdin);
freopen("kahuucino.out","w",stdout);
scanf("%d",&t);
while(t--)
{
clear(); scanf("%d",&n);
for(int i=;i<=n;++i)
scanf("%s",s[i]); for(int i=;i<=n;++i)
work(i);//处理每个字符串的情况 /*
printf("\n");
for(int i=1;i<=n;++i)
printf("%d ",len[i]);
printf("\n");
*/ for(int l,i=;i<=n;++i)
{
if(del[i])continue;
for(int j=i+;j<=n;++j)
{
if(del[j]||len[i]!=len[j])continue;
if(judge(i,j))
{
// printf("\n%d %d\n",i,j);
del[j]=true;
ans+=;
break;
}
}
}
printf("%d\n",n-ans);
}
fclose(stdin);fclose(stdout);
return ;
}
/*
5
esprit
god
redotopc
odcpoter
dog 样例第一组数据解释:
redotopc -> cpot oder -> topcod er -> do cpoter -> odcpoter
最后剩3个 以连续两个字符为一个单位
*/
考试30分代码
/*
把字符串拆成有两个字母的组合
然后将这些组合按照字典序排起来,合到一起形成一个新的字符串
最后判断这个字符串有没有出现过
*/
#include <algorithm>
#include <iostream>
#include <string>
#include <cstdio>
#include <vector>
#include <set> std::set<std::string> h;
std::string a[];
int getMin(std::vector<std::string> words)
{
int n=words.size(),ans=n;
h.clear();
for(int i=;i<n;++i)
{
int m=words[i].size();
std::string s="";
for (int j=;j*<m;++j)
{
char x=words[i][j*],y=words[i][j*+];
if(x>y)std::swap(x,y);
a[j]=x,a[j]+=y;
}
std::sort(a,a+m/);
for(int j=;j*<m;++j)s+=a[j];
if(m&)s+=words[i][m-];
if(h.find(s)==h.end())h.insert(s);
else h.erase(s),ans-=;
}
return ans;
} int main()
{
freopen("kahuucino.in","r",stdin);
freopen("kahuucino.out","w",stdout); int T,n,m;
std::string s;
std::vector<std::string> w;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
w.clear();
for(int i=;i<n;++i)
{
std::cin>>s;
w.push_back(s);
}
printf("%d\n",getMin(w));
}
fclose(stdin);fclose(stdout);
return ;
}
正解
T2
麻耶
【问题描述】
油库里是幻想乡特有的一种生物。每只油库里都有一个战斗力值和一个能量值。当两只油库里战斗时,总是战斗力值高的一位获胜。获胜者的战斗力值将变成(自己的原战斗力值-对手的战斗力值+对手的能量值)。败者将死去。若两者战斗力值一样,则同归于尽。
思考熊发现了很多油库里,他想知道通过互相战斗之后油库里中战斗力值+能量值最高的一个可能到达多少。你能帮他们求出来吗?
(假设除了考察的那只油库里之外,其他油库里之间不会发生战斗)
【输入格式】
第一行是一个整数N,代表当前有多少油库里。
接下来的N行, 每一行有两个整数u,v, 代表这只油库里的战斗力值和能量值。
【输出格式】
输出一个整数,代表油库里中战斗力值+能量值最高的一个能达到多少。
【样例输入】
2
1 2
2 1
【样例输出】
4
【样例解释】
无。

不是所有油库里都要打一遍!!!
本来自信满满能拿10分……………………
正解是贪心
题意描述不清……
以为是所有油库里都要打一遍
但是实际是可以随意选着搞,想和哪个打和哪个打……
#include <algorithm>
#include <complex>
#include <cstdio>
const int N=1e5+;
#ifdef Win32
#define LL "%I64d"
#else
#define LL "%lld"
#endif
struct node{
int u,v;
}peo[N];
int n;
long long ans;
int read()
{
int n=,w=;register char c=getchar();
while(c<''||c>''){if(c=='-')w=-;c=getchar();}
while(c>=''&&c<='')n=n*+c-'',c=getchar();
return n*w;
}
bool cmp(const node &a,const node &b)
{
if(a.u==b.u)return a.v>b.v;
return a.u<b.u;
}
inline long long max(long long x,long long y)
{return x>y?x:y;}
int main()
{
freopen("zyougamaya.in","r",stdin);
freopen("zyougamaya.out","w",stdout);
n=read();
for(int i=;i<=n;++i)
{
peo[i].u=read();
peo[i].v=read();
ans=max(ans,(long long)peo[i].u+peo[i].v);
}
std::sort(peo+,peo+n+,cmp);
long long sum=;
for(int i=;i<=n;++i)
{
ans=max(ans,sum+peo[i].u+peo[i].v);
if(peo[i].u<peo[i].v)
sum+=peo[i].v-peo[i].u;
}
printf("%I64d",ans);//不能用define的LL,只能得10分
fclose(stdin);fclose(stdout);
return ;
}
正解
T3


思路:大模拟
注意细节!!!!!
#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
char cmd[];
struct Node{
int son[],now,fa,type;
//儿子有哪些,现在到了第几个儿子,父亲是谁,是文件还是文件夹(1是文件,2是文件夹)
std::string s;
Node(){now=,fa=;}
}a[]; inline void del_file(int x)
{
a[x].fa=;
a[x].type=;
a[x].s=' ';
} void del_directory(int x)
{
a[x].fa=;
a[x].s=' ';
a[x].type=;
for(int i=;i<=a[x].now;++i)
{
if(a[a[x].son[i]].type==)
del_file(a[x].son[i]);
else del_directory(a[x].son[i]);
a[x].son[i]=;
}
a[x].now=;
} int main()
{
freopen("nacumegu.in","r",stdin);
freopen("nacumegu.out","w",stdout);
int n,now=-;//now:现在在哪个里面
scanf("%d",&n);
for(int i=;i<=n;++i)
{
// printf("\nGG\n");
scanf("%s",cmd);
switch(cmd[])
{
case 'c'://转换目录
std::cin>>a[i].s; if(a[i].s[]=='.')
{//向上一级
if(a[now].fa!=)
now=a[now].fa;
else printf("No parent directory!\n");
}
else
{//向下一级
for(int j=;j<=a[now].now;++j)
if(a[a[now].son[j]].s==a[i].s&&a[a[now].son[j]].type==)
{
now=a[now].son[j];
goto S;
}
printf("No such directory!\n");
}
// --i,--n;//没必要
continue; case 't'://新建文件 std::cin>>a[i].s;
for(int j=;j<=a[now].now;++j)
if(a[a[now].son[j]].s==a[i].s&&a[a[now].son[j]].type==)
{//已经有了
printf("File already exists!\n");
goto S;
}
a[now].son[++a[now].now]=i;
a[i].now=;
a[i].fa=now;
a[i].type=;
continue; case 'r'://删除 std::cin>>a[i].s;
if(strlen(cmd)<)
{//删除文件
for(int j=;j<=a[now].now;++j)
if(a[a[now].son[j]].s==a[i].s&&a[a[now].son[j]].type==)
{//有
del_file(a[now].son[j]);
a[now].son[j]=;
goto S;
}
printf("No such file!\n");
}
else
{//删除文件夹
for(int j=;j<=a[now].now;++j)
if(a[a[now].son[j]].s==a[i].s&&a[a[now].son[j]].type==)
{//有
del_directory(a[now].son[j]);
a[now].son[j]=;
goto S;
}
printf("No such directory!\n");
}
goto S; case 'm':
//新建文件夹
std::cin>>a[i].s;
for(int j=;j<=a[now].now;++j)
if(a[a[now].son[j]].s==a[i].s&&a[a[now].son[j]].type==)
{//已经有了
printf("Directory already exists!\n");
goto S;
}
a[now].son[++a[now].now]=i;
a[i].now=;
a[i].fa=now;
a[i].type=;
continue; case 'l'://输出目录下的文件及文件夹
for(int j=;j<=a[now].now;++j)
{
if(a[a[now].son[j]].s[]==' ')continue;
std::cout<<a[a[now].son[j]].s;
if(a[a[now].son[j]].type==)
printf(" <F>\n");
else printf(" <D>\n");
}
}
S: ;
}
fclose(stdin);fclose(stdout);
return ;
}
正解
钟长者P71解题报告的更多相关文章
- CH Round #56 - 国庆节欢乐赛解题报告
最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...
- 二模13day1解题报告
二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...
- BZOJ 1051 最受欢迎的牛 解题报告
题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4438 Solved: 2353[S ...
- 习题:codevs 2822 爱在心中 解题报告
这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...
- 习题:codevs 1035 火车停留解题报告
本蒟蒻又来写解题报告了.这次的题目是codevs 1035 火车停留. 题目大意就是给m个火车的到达时间.停留时间和车载货物的价值,车站有n个车道,而火车停留一次车站就会从车载货物价值中获得1%的利润 ...
- 习题: codevs 2492 上帝造题的七分钟2 解题报告
这道题是受到大犇MagHSK的启发我才得以想出来的,蒟蒻觉得自己的代码跟MagHSK大犇的代码完全比不上,所以这里蒟蒻就套用了MagHSK大犇的代码(大家可以关注下我的博客,友情链接就是大犇MagHS ...
- 习题:codevs 1519 过路费 解题报告
今天拿了这道题目练练手,感觉自己代码能力又增强了不少: 我的思路跟别人可能不一样. 首先我们很容易就能看出,我们需要的边就是最小生成树算法kruskal算法求出来的边,其余的边都可以删掉,于是就有了这 ...
- NOIP2016提高组解题报告
NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合
- LeetCode 解题报告索引
最近在准备找工作的算法题,刷刷LeetCode,以下是我的解题报告索引,每一题几乎都有详细的说明,供各位码农参考.根据我自己做的进度持续更新中...... ...
随机推荐
- 【1】【leetcode-5】最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad"输出: "bab"注意: " ...
- VMware学习笔记之在虚拟机中使用Ghost系统盘安装xp黑屏卡在光标闪无法进入系统
使用ghost安装后,无法进入系统,卡在光标闪动,请参考如下: https://www.cnblogs.com/mq0036/p/3588058.html https://wenku.baidu.co ...
- .Net Core WebApi(2)—Swagger
上一个版本的入门Swagger提示不够完整,这章着重完善和优化 Swagger用于将我们编写的接口自动生成规范化的文档,便于进行测试和对接 一.创建Swagger 1.1 Nuget 安装 ...
- 关于如何控制一个页面的Ajax读数据只读一次的简单解决办法!
例如:一个页面有一个按钮,点击的时候用ajax去后台获取数据,获取成功以后返回.下次再点击的时候就不要去获取数据了. 解决办法有很多: 1.用Get方法去读数据,会缓存. 2.用jquery的data ...
- sense chrome扩展工具安装问题
下载一个chrome的插件,只能在国内下了.有个什么插件网 .下载完之后是 .crx 格式的.直接拖到 chrome的扩展工具里,显示,插件有问题.无语 参考了一个网上的教程. 1.先将扩展名 .c ...
- pathlib的使用
目录 一. Python2与Python3的路径处理的对比 二. pathlib的几个使用示例 1. 最简单的使用 2. 追加路径到Python的sys.path中 3. 生成目录树的技巧 4. 递归 ...
- mysql修改字符集问题
mysql字符集问题: 本文主要解决mysql7以下问题:mysql7在默认安装后,关于数据库,表默认保存字符格式为latin1: 可以通过命令:查询当前mysql的编码设置: show variab ...
- 使用EwoMail搭建属于自己的个人邮件服务器——超详细图文教程
版权声明:本文为CSDN博主「C_成」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net/qq_41692307 ...
- mybatis添加sql打印功能
添加配置文件: mybatis-config.xml <?xml version="1.0" encoding="UTF-8"?> <!DOC ...
- 实验3 SQL注入原理-万能密码注入
实验目的 (1)理解[万能密码]的原理 (2)学习[万能密码]的使用 实验原理 一.访问目标网站 1.选择一个存在漏洞的论坛 http://192.168.1.3:8009 进入 2.输入用户名[ad ...