week7_简单题_C_水题_hdu_5578+F_贪心_hdu_5583
C HDU_5578
Input
实例个数T
然后T行字符串
字符串中仅含有小写字母。
1≤T≤50
1≤len≤1000(len为字符串长度)
Output
对于每个实例输出Case #t: H,表示第t个实例的答案是H。 如果没有相同的字母,H=-1。
Sample Input
2
ac
wxzayzxw
Sample Output
Case #1: -1
Case #2: 3
纯模拟_两层循环
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
char str[];
int main() {
int t;
scanf("%d",&t);
int cnt=;
while(t--) {
scanf("%s",str);
int len=strlen(str);
int ans=,flag=;
for(int i=; i<len; i++) {
for(int j=i+; j<len; j++) {
if(str[j]==str[i]) {
ans=min(ans,j-i);
flag=;
break;
}
}
}
if(!flag)ans=-;
printf("Case #%d: %d\n",cnt++,ans);
}
return ;
}
另一种更快一点的_一层循环_利用数组存前导位置
#include<cstdio>
#include<cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
char s[]; int x[];
int l;
int g=;
int main() {
int T;
cin>>T;
int k=;
while(T--) {
memset(x,-,sizeof(x));
memset(s,,sizeof(s));
l=;
//g=0;
scanf("%s",s);
int len=strlen(s);
for(int i=; i<len; i++) {
int t=s[i]-'a';
if(x[t]!=-) {
int l1=i-x[t];
l=min(l,l1);
}
x[t]=i;
}
if(l==)l=-;
cout<<"Case #"<<++k<<": "<<l<<endl;
}
return ;
}
F HDU_5583
将字符串分成很多子串(连续),每个子串中不能同时含0和1。字符串的值为每个子串长度的平方和。例如00110 值为2*2+2*2+1*1=9。
这对你来说太简单了,你所要做的是更改字符串中的最多一个字符(可不改),当然了只能改为0或1,求出更改之后的字符串的最大值。
Input
实例个数T
然后T行字符串
1≤T≤50
1≤len≤100000 (len为字符串长度)
Output
对于每个实例输出
Case #t: ans,表示第t个实例的答案是ans。
Sample Input
2
00110
0010
Sample Output
Case #1: 13
Case #2: 16
纯模拟_TE了的答案_即使模拟也要注意最后一个长度记录下来
#include<cstdio>
#include<cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
char s[]; int x[];
ll l;
int g=;
int len;
ll f() { char g=;
ll lx=;
ll lt=;
for(int i=; i<len; i++) {
if(g==s[i]) {
lx++;
} else {
lt+=lx*lx;
//cout<<g<<": "<<lx<<endl;
g=s[i];
lx=;
}
if(i==len-) {
lt+=lx*lx;
//cout<<g<<": "<<lx<<endl;
}
}
return lt;
}
int main() {
int T;
cin>>T;
int k=;
while(T--) {
memset(s,,sizeof(s));
//g=0;
scanf("%s",s);
len=strlen(s);
l=f();
for(int i=; i<len; i++) {
if(s[i]=='') {
s[i]='';
///cout<<f()<<endl;
l=max(l,f());
s[i]='';
} else {
s[i]='';
//cout<<f()<<endl;
l=max(l,f());
s[i]='';
}
}
printf("Case #%d: %lld\n",++k,l); }
return ;
}
改了一下, 贪心, 想要平方和最大, 已知, a^2+b^2<=(a+b)^2,显然不希望砍断长串,所以在各个串的边界改,
只能改一个, 那实际上就是求边界改的结果,每次改, 影响的是一对相邻串
如果模拟还是每次都要算一次(循环一次), 很有可能再TE, 那就转化成计算, 改边界,就是,某相邻串长度一个-1,一个+1,算此时新的结果,
和模拟一样也要注意最后一个记录下来
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
typedef long long ll;
using namespace std;
const int N=1e5+;
ll dp[N];
char str[N];
int len;
int num;
ll sum;
ll ans;
void f() {
dp[]=;
for(int i=; i<len; i++) {
if(str[i]==str[i-]) {
dp[num]++;
} else {
sum+=dp[num]*dp[num];
num++;
dp[num]++;
}
}
sum+=dp[num]*dp[num];
if(num==) {
ans=dp[]*dp[];
}
}
int main() {
int t;
scanf("%d",&t);
int k=;
while(t--) {
num=;
ans=;
sum=;
scanf("%s",str);
len=strlen(str);
memset(dp,,sizeof(dp));
f();
for(int i=; i<=num; i++) {
if(dp[i]==) {
ans=max(ans,sum+*(dp[i-]*dp[i+]+dp[i-]+dp[i+]));
} else {
if(dp[i-]>=dp[i]) {
ans=max(ans,sum+*(dp[i-]-dp[i]+));
} else ans=max(ans,sum+*(dp[i]-dp[i-]+));
}
}
cout<<"Case #"<<++k<<": "<<ans<<"\n";
}
return ;
}
week7_简单题_C_水题_hdu_5578+F_贪心_hdu_5583的更多相关文章
- ytu 1304:串的简单处理(水题)
串的简单处理 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 39 Solved: 11[Submit][Status][Web Board] Desc ...
- 每日一刷(2018多校水题+2016icpc水题)
11.9 线段树 http://acm.hdu.edu.cn/showproblem.php?pid=6315 求逆序对个数 http://acm.hdu.edu.cn/showproblem.php ...
- sdut 2413:n a^o7 !(第三届山东省省赛原题,水题,字符串处理)
n a^o7 ! Time Limit: 1000MS Memory limit: 65536K 题目描述 All brave and intelligent fighters, next you w ...
- sdut 2163:Identifiers(第二届山东省省赛原题,水题)
Identifiers Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 Identifier is an important c ...
- HDU 4772 Zhuge Liang's Password (2013杭州1003题,水题)
Zhuge Liang's Password Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- sdut 2154:Shopping(第一届山东省省赛原题,水题)
Shopping Time Limit: 1000MS Memory limit: 65536K 题目描述 Saya and Kudo go shopping together.You can ass ...
- HDU 5776 sum (BestCoder Round #85 A) 简单前缀判断+水题
分析:就是判断简单的前缀有没有相同,注意下自身是m的倍数,以及vis[0]=true; #include <cstdio> #include <cstdlib> #includ ...
- sdut 2158:Hello World!(第一届山东省省赛原题,水题,穷举)
Hello World! Time Limit: 1000MS Memory limit: 65536K 题目描述 We know that Ivan gives Saya three problem ...
- CodeForces-2015 HIAST Collegiate Programming Contest-Gym-100952A.水题 100952B.水题 100952C.回文字符串 100952D.杨辉三角处理组合数 其他题目待续。。。
哈哈哈哈哈哈哈,最近一直在补题,改各种错误的代码,wa了20多遍,改到心态爆炸,改好之后,感觉世界都美好了(叉会腰~)... A. Who is the winner? time limit per ...
随机推荐
- 大数据软件安装之Flume(日志采集)
一.安装地址 1) Flume官网地址 http://flume.apache.org/ 2)文档查看地址 http://flume.apache.org/FlumeUserGuide.html 3) ...
- iOS 原生库(AVFoundation)实现二维码扫描,封装的工具类,不依赖第三方库,可高度自定义扫描动画及界面(Swift 4.0)
Create QRScanner.swift file // // QRScanner.swift // NativeQR // // Created by Harvey on 2017/10/24. ...
- 曹工说Spring Boot源码(25)-- Spring注解扫描的瑞士军刀,ASM + Java Instrumentation,顺便提提Jar包破解
写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...
- 【转载】因为我们是OIer
我们是OIer, 所以我们 不用在跑道上挥汗如雨: 不用在球场上健步如飞: 更不用在没事的时候, 经受非人的体能训练-- 但是, 我们却要把头脑 高速运转, 还要接受一大堆 大学生也只是 " ...
- 如何使用WordPress搭建网站
1.空间的申请 阿里用户可以申请[阿里共享虚拟主机普惠版6元/年],虽然配置和空间不高,但也可以做个小站点的.当不满足当前配置的时候,随时可以进行升级,所以拿来练手还是比较合适的. 2.WordP ...
- 从零开始实现穿衣图像分割完整教程(附python代码演练)
时装业是人工智能领域很有前景的领域.研究人员可以开发具有一定实用价值的应用.我已经在这里展示了我对这个领域的兴趣,在那里我开发了一个来自Zalando在线商店的推荐和标记服装的解决方案. 在这篇文章中 ...
- Xamarin.Forms客户端第一版
Xamarin.Forms客户端第一版 作为TerminalMACS的一个子进程模块,目前完成第一版:读取展示手机基本信息.联系人信息.应用程序本地化. 功能简介 详细功能说明 关于TerminalM ...
- 【Pytest02】全网最全最新的Pytest框架快速进阶篇(pytest前置和后置以及忽略测试用例)
一.Pytest的前置和后置方法 1.Pytest可以集成unittest实现前置和后置 import unittest import pytest class TestCase(unittest.T ...
- Effective Java要点笔记
第一章: 创建和销毁对象 类可以通过静态工厂方法来提供客户端,而不是通过构造器 优点: 自定义工厂名称,提高可读性 可以工厂里搞单例 控制实例类是哪种子类 总之是更加灵活,可读性更高 缺点: 有可能会 ...
- MYSQL-----------实验一 MySQL的安装与命令初步
(1)启动MySQL,并打开任务管理器查看服务进程是否已经启动. (2) 进入Windows命令行,使用命令登录MySQL服务器. (3) 使用show命令查看当前系统的字符集,并修改其中的两 ...