Codeforces Round#297 div2
B:
题意:给定一个字符串,然后给定m个数字
对于每个数字ai的含义是,将ai到n-ai+1的字符串给翻转一遍。
要求输出m次翻转之后的字符串。
想法就是判断第i个位置的字符是翻转了奇数次,还是偶数次就可以了,翻转了偶数次代表没翻转
自己的思想的是:将m个数字存储下来,然后排序。对于每个str[i], 1<=i<strlen(str),
使用index=upper_bound(a,a+m,i),upper_bound(a,a+m,i)的返回值是返回数组中第一个比i大的元素迭代器,如果没有,则返回指向最后一个元素后面的迭代器
所以index-a代表在数组a中,比i小的数字有多少个。
所以如果index-a是奇数,那么代表位置i翻转了奇数次,输出str[n-i+1]
如果是偶数,代码位置i翻转了偶数次,输出str[i]
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int N = + ;
char str[N];
int a[N];
bool vis[N]; int main()
{
int m,i,x,n;
scanf("%s",str+);
scanf("%d",&m);
n = strlen(str+);
for(i=; i<=m; ++i)
scanf("%d",&a[i]);
sort(a+,a+m+);
int nn = n/,*index;
for(i=; i<=nn; ++i)
{ index = upper_bound(a+,a+m+,i);
if((index-a-)%==)
{
printf("%c",str[n-i+]);
vis[n-i+] = true;
}
else
printf("%c",str[i]); }
for(i=nn+; i<=n; ++i)
{
if(vis[i])
printf("%c",str[n-i+]);
else
printf("%c",str[i]);
}
puts("");
}
但是看了别人的代码,只要维护一个前缀和就够了,深感自己还是太年轻
#include <stdio.h>
#include <string.h>
char str[+];
int a[+];
int main()
{
int i,m,x;
scanf("%s",str+);
scanf("%d",&m);
for(i=; i<m; ++i)
{
scanf("%d",&x);
a[x]++;
}
int n = strlen(str+);
m = n / ;
for(i=; i<=m; ++i)
a[i] += a[i-];//前缀和 for(i=; i<=n; ++i)
{
if(a[i]%==)//小于等于下标i修改了奇数还是偶数次
{
a[n-i+] = ;
printf("%c",str[i]);
}
else
{
printf("%c",str[n-i+]);
a[n-i+] = ;
}
}
puts("");
return ;
}
C:
给n条木棍,4条木棍构成一个矩形,问怎么构造,使得所有矩形的面积和最大,有个规则是木棒的长度能减去1,但仅限一次
矩形的长和宽当然是越大越好,所以我们将木棒从小到大排序,然后从后面开始处理
因为矩阵的长和宽都需要两条,所以我们每次选出两条木板构成成长或者宽
a[i]==a[i-1]||a[i]==a[i-1]+1 那么第i根木棒就能和第i-1根木棒构成长或者宽,然后i-=2
否则第i条木棒无用,i-=1.
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
typedef __int64 LL;
const int N = + ;
int a[N];
int main()
{
int n,i;
scanf("%d",&n);
for(i=; i<n; ++i)
scanf("%d",&a[i]);
sort(a,a+n);
LL t = ,ans = ;
for(i=n-; i>;)
{
if(a[i]==a[i-] || a[i-]==a[i]-)
{
if(t==)
{
t = a[i-];
}
else
{
ans += t * a[i-];
t = ;
}
i-=;
}
else
i-=;
}
printf("%I64d\n",ans);
return ;
}
Codeforces Round#297 div2的更多相关文章
- Codeforces Round #539 div2
Codeforces Round #539 div2 abstract I 离散化三连 sort(pos.begin(), pos.end()); pos.erase(unique(pos.begin ...
- Codeforces Round #297 (Div. 2)E. Anya and Cubes 折半搜索
Codeforces Round #297 (Div. 2)E. Anya and Cubes Time Limit: 2 Sec Memory Limit: 512 MBSubmit: xxx ...
- Codeforces Round #297 (Div. 2)D. Arthur and Walls 暴力搜索
Codeforces Round #297 (Div. 2)D. Arthur and Walls Time Limit: 2 Sec Memory Limit: 512 MBSubmit: xxx ...
- Codeforces Round #297 (Div. 2)C. Ilya and Sticks 贪心
Codeforces Round #297 (Div. 2)C. Ilya and Sticks Time Limit: 2 Sec Memory Limit: 256 MBSubmit: xxx ...
- Codeforces Round #297 (Div. 2)B. Pasha and String 前缀和
Codeforces Round #297 (Div. 2)B. Pasha and String Time Limit: 2 Sec Memory Limit: 256 MBSubmit: xxx ...
- Codeforces Round #297 (Div. 2)A. Vitaliy and Pie 水题
Codeforces Round #297 (Div. 2)A. Vitaliy and Pie Time Limit: 2 Sec Memory Limit: 256 MBSubmit: xxx ...
- 【前行】◇第3站◇ Codeforces Round #512 Div2
[第3站]Codeforces Round #512 Div2 第三题莫名卡半天……一堆细节没处理,改一个发现还有一个……然后就炸了,罚了一啪啦时间 Rating又掉了……但是没什么,比上一次好多了: ...
- BFS Codeforces Round #297 (Div. 2) D. Arthur and Walls
题目传送门 /* 题意:问最少替换'*'为'.',使得'.'连通的都是矩形 BFS:搜索想法很奇妙,先把'.'的入队,然后对于每个'.'八个方向寻找 在2*2的方格里,若只有一个是'*',那么它一定要 ...
- 贪心 Codeforces Round #297 (Div. 2) C. Ilya and Sticks
题目传送门 /* 题意:给n个棍子,组成的矩形面积和最大,每根棍子可以-1 贪心:排序后,相邻的进行比较,若可以读入x[p++],然后两两相乘相加就可以了 */ #include <cstdio ...
随机推荐
- byte为什么要与上0xff(转)
无意间翻看之间的代码,发现了一段难以理解的代码. byte[] bs = digest.digest(origin.getBytes(Charset.forName(charsetName))) ; ...
- 混淆器:java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器
java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器 下载地址:http://yunpan.cn/QXhEcGNYLgwTD 运行方式:java -jar Encryp ...
- android打包apk时混淆遇到的问题
android打包apk的时候一般会选择混淆,而在eclipse中常使用的是proguard来混淆.有很多时候引用了第三方包的时候会导致打包不成功,或者打包成功不能运行的情况. 首先看看正常的prog ...
- Indy的评价
已经抛弃了indy,实在是不好,tcp在android下退出报错.我现在改用系统自带的httpclient.推荐RTC RTC带有一个tcp组件,不过处理方式跟indy不同,测试过,在android下 ...
- 为VisualSVN Server增加在线修改用户密码的功能
原文:为VisualSVN Server增加在线修改用户密码的功能 附件下载:点击下载 VisualSVN Server是一个非常不错的SVN Server程序,方便,直观,用户管理也异常方便. 不过 ...
- CSU 1506(最小费用最大流)
传送门:Double Shortest Paths 题意:有两个人:给出路径之间第一个人走所需要的费用和第二个人走所需要的费用(在第一个人所需的 费用上再加上第二次的费用):求两个人一共所需要的最小费 ...
- 一致性哈希算法(consistent hashing)样例+測试。
一个简单的consistent hashing的样例,非常easy理解. 首先有一个设备类,定义了机器名和ip: public class Cache { public String name; pu ...
- 基于libevent, libuv和android Looper不断演进socket编程 - 走向架构师之路 - 博客频道 - CSDN.NET
基于libevent, libuv和android Looper不断演进socket编程 - 走向架构师之路 - 博客频道 - CSDN.NET 基于libevent, libuv和android L ...
- poj - 1170 - Shopping Offers(减少国家dp)
意甲冠军:b(0 <= b <= 5)商品的种类,每个人都有一个标签c(1 <= c <= 999),有需要购买若干k(1 <= k <=5),有一个单价p(1 & ...
- 读取生产环境go语言的最佳实践展示
近期看了一篇关于go产品开发最佳实践的文章,go-in-procution.作者总结了他们在用go开发过程中的非常多实际经验,我们非常多事实上也用到了.鉴于此,这里就简单的写写读后感,兴许我也争取能将 ...