申請SAE

如果您發現本博客的外觀很難看,那是因為部分外觀文件被中國.國家.防火.牆屏.蔽所致!
請翻~牆!

我的Wordpress博客的地址: http://zhuyf.tk/

2011年11月13日 星期日

USACO 2011 November Contest, Bronze Division Problem 3. Moo Sick (moosick)

Problem 3: Moo Sick [Rob Seay]

Everyone knows that cows love to listen to all forms of music. Almost all forms, that is -- the great cow composer Wolfgang Amadeus Moozart once discovered that a specific chord tends to make cows rather ill. This chord, known as the ruminant seventh chord, is therefore typically avoided in all cow musical compositions. 

Farmer John, not knowing the finer points of cow musical history, decides to play his favorite song over the loudspeakers in the barn. Your task is to identify all the ruminant seventh chords in this song, to estimate how sick it will make the cows. 

The song played by FJ is a series of N (1 <= N <= 20,000) notes, each an integer in the range 1..88. A ruminant seventh chord is specified by a sequence of C (1 <= C <= 10) distinct notes, also integers in the range 1..88. However, even if these notes are transposed (increased or decreased by a common amount), or re-ordered, the chord remains a ruminant seventh chord! For example, if "4 6 7" is a ruminant seventh chord, then "3 5 6" (transposed by -1), "6 8 9" (transposed by +2), "6 4 7" (re-ordered), and "5 3 6" (transposed and re-ordered) are also ruminant seventh chords.

A ruminant seventh chord is a sequence of C consecutive notes satisfying the above criteria. It is therefore uniquely determined by its starting location in the song. Please determine the indices of the starting locations of all of the ruminant seventh chords. 

PROBLEM NAME: moosick

INPUT FORMAT: 
* Line 1: A single integer: N.
* Lines 2..1+N: The N notes in FJ's song, one note per line. 
* Line 2+N: A single integer: C.
* Lines 3+N..2+N+C: The C notes in an example of a ruminant seventh chord. All transpositions and/or re-orderings of these notes are also ruminant seventh chords.

SAMPLE INPUT (file moosick.in): 






10 
3


7

INPUT DETAILS: 
FJ's song is 1,8,5,7,9,10. A ruminant seventh chord is some transposition/re-ordering of 4,6,7. OUTPUT FORMAT:
* Line 1: A count, K, of the number of ruminant seventh chords that appear in FJ's song. Observe that different instances of ruminant seventh chords can overlap each-other.
* Lines 2..1+K: Each line specifies the starting index of a ruminant seventh chord (index 1 is the first note in FJ's song, index N is the last). Indices should be listed in increasing sorted order. 

SAMPLE OUTPUT (file moosick.out): 




OUTPUT DETAILS: Two ruminant seventh chords appear in FJ's song (and these occurrences actually overlap by one note). The first is 8,5,7 (transposed by +1 and reordered) starting at index 2, and the second is 7,9,10 (transposed by +3) starting at index 4.

【分析】
還是模擬題,先對那C個ruminant seventh chords進行排序,然後一次次的快速排序,判斷即可。

【我的代碼(成績出來了,滿分)】
/*
ID:zyfwork1
PROB:moosick
LANG:C++
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
int N,C;
int Num[20001];
int Sev[11];
int res[20001];
int top=0;

int cmp(const void  *a,const void  *b)
{
    return *((int *)a)-*((int *)b);
}

void init()
{
    scanf("%d",&N);
    for (int i=1;i<=N;i++)
        scanf("%d\n",&Num[i]);
    scanf("%d",&C);
    for (int i=1;i<=C;i++)
        scanf("%d\n",&Sev[i]);
    qsort(Sev+1,C,sizeof(Sev[0]),cmp);
    return;
}

void work()
{
    for (int i=1;i<=N-C+1;i++)
    {
        int tmp[11];
        memset(tmp,0,sizeof(tmp));
        int tt=1;
        for (int j=i;tt<=C;j++)
            tmp[tt++]=Num[j];
        qsort(tmp+1,C,sizeof(tmp[0]),cmp);
        int delta=tmp[1]-Sev[1];
       
        bool flag=true;
        for(int k=2;k<=C;k++)
        {
            if(tmp[k]-delta!=Sev[k])
            {
                flag=false;
                break;
            }
        }
        if(flag)
        {
            res[++top]=i;
        }
    }
   
    printf("%d\n",top);
    for (int i=1;i<=top;i++)
        printf("%d\n",res[i]);
   
}

int main()
{
    freopen("moosick.in","r",stdin);
    freopen("moosick.out","w",stdout);
    init();
    work();
    return 0;
}

沒有留言:

張貼留言