NYOJ 5,7

Posted 可达龙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NYOJ 5,7相关的知识,希望对你有一定的参考价值。

总要刷点水题找自信Orz

//5 KMP

//7 绝对值加和最小

//NYOJ 5 简单题
#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
const int N = 1000 + 5;
char s[15];
char ss[N];
int nxt[15];
void getnxt()
{
    int n = strlen(s);
    int i = 0, j = -1;
    nxt[0] = -1;
    while(i < n)
    {
        if(j == -1 || s[i] == s[j])
        {
            i++;j++;
            if(s[i] == s[j])
                nxt[i] = nxt[j];
            else
                nxt[i] = j;
        }
        else
            j = nxt[j];
    }
}

int kmp()
{
    int i = 0, j = 0;
    int cnt = 0;
    int n = strlen(ss), m = strlen(s);
    while(i < n && j < m)
    {
        if(j == -1 || ss[i] == s[j])
        {
            i++; j++;
        }
        else
            j = nxt[j];
        if(j == m)
        {
            cnt++;
            j = nxt[j];
        }
    }
    return cnt;
}

int t;
int main()
{
    scanf("%d", &t);
    while(t--)
    {
        scanf("%s", s);
        scanf("%s", ss);
        getnxt();
        printf("%d\n",kmp());
    }

}
//NYOJ 7 简单题
#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 20 + 5;
int x[N], y[N];
int t, n;

int main()
{
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d", &n);
        for(int i = 0; i < n; i++)
        {
            scanf("%d%d", &x[i], &y[i]);
        }
        int ans = 0;
        sort(x, x+n);
        sort(y, y+n);
        for(int i = 0, j = n-1; i < j; i++, j--)
        {
            ans += x[j]-x[i];
            ans += y[j]-y[i];
        }
        printf("%d\n", ans);
    }

}

以上是关于NYOJ 5,7的主要内容,如果未能解决你的问题,请参考以下文章

NYOJ_77 开灯问题

以下代码片段的时间复杂度是多少?

nyoj 单调递增子序列

nyoj 99-单词拼接 (euler, dfs)

nyoj 84-阶乘的0 (规律题)

nyoj 214 单调递增子序列 另类dp