UVA 1585 字符串处理

背景:小紫书上习题

学习:1.条件运算符?:; 的运用可以简化,高效代码。?的优先级大于=,小余算术和关系运算符。与多重赋值语句一样采用右结合。(用到了dp的思想)

代码:

#include<stdio.h>
#include<string.h>
int main(void){
  int num[80];
  char str[81];
  int t;
  scanf("%d",&t);
  while(t--){
  	int sum = 0;
  	scanf("%s",str);
	str[0]=='O' ? num[0]=1:num[0]=0;
	for(int i=1;i<strlen(str);i++){
	  str[i]=='O' ? num[i]=num[i-1]+1:num[i]=0;
	  sum += num[i];
	}
	printf("%d\n",sum+num[0]);
  }
  return 0;
}
时间: 2024-10-25 01:37:33

UVA 1585 字符串处理的相关文章

UVa 1585 Score --- 水题

题目大意:给出一个由O和X组成的串(长度为1-80),统计得分. 每个O的分数为目前连续出现的O的个数,例如,OOXXOXXOOO的得分为1+2+0+0+1+0+0+1+2+3 解题思路:用一个变量term记录当前O的分数,若出现O,则term+1,若出现X,则term=0: 再用一个sum记录总和,没次加上term即可 /* UVa 1585 Score --- 水题 */ #include <cstdio> #include <cstring> const int maxn =

UVa 10340 字符串基础

背景:小紫书习题,开始数组开小了runtime error了一次,显然数组越界.复杂度:O(max(A的长度,B的长度)). 题意:看字符串A是不是字符串B的子串.直接顺序扫描即可. #include<stdio.h> #include<string.h> char str[1000000],ttr[1000000]; int main(void){ while(scanf("%s %s",str,ttr)!=EOF){ int j=0,sj=strlen(st

UVa 232 字符串处理、

背景:做了三个半小时,代码能力堪忧啊,各种调试,各种出错,要分析一下,这些错点尽量不能再错. 学习:1.对于字符串数组,要把每一行都开大一位,该位用来存放'\0',否则将会出现未知输出.也就是说:字符串二维数组的每一行都可以看做一个字符数组,结尾都有一个'\0'.printf在用'%s'格式符输出字符串,总是从给定的首地址开始,遇到'\0'结束. 2.写程序的时候要有动态的眼光来看待当前写下的代码运行时的样子.运行出错不要理解单步调试,因先猜测是哪里错了,先看代码在脑中模拟. #include<

UVa 12206 (字符串哈希) Stammering Aliens

体验了一把字符串Hash的做法,感觉Hash这种人品算法好神奇. 也许这道题的正解是后缀数组,但Hash做法的优势就是编码复杂度大大降低. 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5 6 const int maxn = 40000 + 10; 7 const int x = 123; 8 int n, m, pos; 9 unsigne

UVa 1585 Score(得分)

如何计算你们的得分呢?,如“OOXXOXXOOO”. “O”表示问题的正确答案,“X”表示错误的答案.那么它得分是由它自己和它刚刚以前连续的'O'只有当答案是正确的. 例如,第10个问题的分数是由其自身和它的两个先前连续的“0”获得的3. 因此,“OOXXOXXOOO”的得分是通过“1 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 2 + 3”计算的10.你要编写一个计算测试结果分数的程序.输入 输入第一行一个整数T,表示由T个测试用例组成. 每个测试用例以包含由'O'和'X'组成

UVa 1585 - Score

题目:给你一个X和O组成的串,每个O有一个分,为他前面连续的O个数+1,求所有O的分数和. 分析:dp,简单题.lis类似物,每个位记录连续的个数即可. 说明:快500了(⊙_⊙). #include <algorithm> #include <iostream> #include <cstdlib> #include <cstdio> using namespace std; char str[81]; int score[81]; int main()

UVA 1586 字符串处理

背景:做了快40分钟,还是好多细节是调试过来的,看来距离150行以内代码一次通过的能力还很远. 学习:1.变量定义的时候不仅要想到初始化,更要想到初始化的位置,这个变量的作用域如果开大了,和没初始化一样的效果. 代码: #include<stdio.h> #include<string.h> int main(void){ char str[85]; int t; scanf("%d",&t); while(t--){ memset(str,'S',si

得分(Score, ACM/ICPC Seoul 2005,UVa 1585)

#include<cstdio>#include<cstdlib>#include<cstring>int main(){ char s[80];//输入OOXXOXXOOO,最终得分计算为1+2+0+0+1+0+0+1+2+3=10 int m = 0, sum = 0, i = 0; scanf("%s", s); for (i = 0; i < strlen(s); i++) { if (s[i] == 'X') m = 0; if (s

UVa 1585 待解决

是在遇到第一个ooxx的时候会出错,会少算一个1 #include<stdio.h> int main() { int i,k=0,sum=0; char a[100]={"ooxxooxxooox"}; for(i=0;a[i]!='\0';i++) { if((a[i]=='o'&&a[i+1]=='x')||(a[i]=='o'&&a[i+1]=='\0')) { sum+=(1+i-k)*(i-k)/2; } if(a[i]=='x'