(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”计算得到的10。
你要编写一个计算测试结果分数的程序。

输入
您的程序是从标准输入读取。输入由T个测试用例组成。在输入的第一行中给出测试用例T的数量。每个测试用例以一个包含由‘O‘和‘X‘组成的字符串的行开始,并且字符串的长度大于0且小于80.在‘O‘和‘X‘之间没有空格。

输出
您的程序将由标准输出写入。每个测试用例输出一行。该行是包含测试用例的得分。
下面显示了五个测试用例的输入和输出示例。

样例输入
5
OOXXOXXOOO
OOXXOOXXOO
OXOXOXOXOXOXOX
OOOOOOOOOO
OOOOXOOOOXOOOOX

样例输出
10
9
7
55
30

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

int main()
{
    int t,sum,cnt,i,len;
    char str[80];
    scanf("%d",&t);
    while(t--)
    {
        scanf("%s",str);
        sum=0,cnt=0;
        len=strlen(str);
        for(i=0;i<len;i++)
        {
            if(str[i]==‘O‘) cnt+=1;
            else cnt=0;
            sum+=cnt;
        }
        printf("%d\n",sum);
    }
    return 0;
}

时间: 2024-08-23 03:05:42

(UVA)1585 --Score(得分)的相关文章

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 --- 水题

题目大意:给出一个由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

题目:给你一个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()

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

得分(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 习题