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()
{
	int n;
	scanf("%d",&n);
	while (n --) {
		scanf("%s",str);
		score[0] = (str[0] == 'O');
		for (int i = 1 ; str[i] ; ++ i) {
			score[i] = score[i-1]+1;
			if (str[i] == 'X')
				score[i] = 0;
		}
		int sum = 0;
		for (int i = 0 ; str[i] ; ++ i)
			sum += score[i];

		printf("%d\n",sum);
	}
	return 0;
}
时间: 2024-10-13 06:10:11

UVa 1585 - Score的相关文章

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 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'组成

得分(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 --Score(得分)

时间限制:3000MS 64位IO格式:%lld&%llu 描述 有一个客观的测试结果,如"OOXXOXXOOO",一个"O"表示一个问题的正确答案,一个"X"表示一个错误的答案.这个测试的每个问题的分数是由它自己计算的,例如,第10个问题的得分是3,它是由它自己和它的前两个连续的O得到的.因此,"OOXXOXXOOO"的分数是由"1 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 2 + 3&q

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

#include<stdio.h> int main(void) { char b; int t,cou,sum; scanf("%d",&t); getchar(); while(t--) { cou=sum=0; while((b=getchar())!='\n') { if(b=='O')sum+=++cou; else cou=0; } printf("%d\n",sum); } return 0; }

uva 1585

#include <bits/stdc++.h> using namespace std; int main() { int k; cin>>k; stack<int> score; int t=1; string s; while(k--) { t=1; cin>>s; int len=s.size(); for(int i=0;i<len;i++) { if(s[i]=='O') score.push(t++); if(s[i]=='X') { t

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

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'

ACM今日学习总结(2015.08.16)

今日完成情况 UVa 第3章 数组与字符串 六道例题已全部完成. 例题3-1 272 - TEX Quotes 例题3-2 10082 - WERTYU 例题3-3 401 - Palindromes 例题3-4 340 - Master-Mind Hints 例题3-5 1583 - Digit Generator 例题3-6 1584 - Circular Sequence 十二道习题已完成(7道). 习题3-1 1585 - Score 习题3-2 1586 - Molar mass 习题