rosling222
4小时前
 #include <iostream>
#include <algorithm>
using namespace std;

int main(){
    int m; cin >> m;
    int a = 0;
    while(m--){
        int x; cin >> x;
        a = max( a , x );
    }

    int n; cin >> n;
    int b = 0;
    while( n-- ){
        int y; cin >> y;
        b = max( b , y );
    }
    cout << a << " " << b << endl;
}



π_11
5小时前
#include <cstdio>
#include <iostream>
using namespace std;
int l(string n)
{
    int x;
    if(n=="Hunter") x=0;
    else if(n=="Bear") x=1;
    else x=2;
    return x;
}
int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        string a,b;
        cin>>a>>b;
        if(l(a)==l(b)) puts("Tie");
        else if(l(a)==(l(b)+1)%3) puts("Player1");
        else puts("Player2");
    }
    return 0;
}



题目描述

blablabla

样例

blablabla

算法1

(暴力枚举) $O(n^2)$

blablabla

时间复杂度

参考文献

C++ 代码

blablabla

算法2

(暴力枚举) $O(n^2)$

blablabla

时间复杂度

参考文献

C++ 代码

int main() {
    int startHour, startMinute, endHour, endMinute;
    cin >> startHour >> startMinute >> endHour >> endMinute;

    // 计算小时和分钟的差值
    int durationHour = endHour - startHour;
    int durationMinute = endMinute - startMinute;

    // 如果分钟为负数,需要调整
    if (durationMinute < 0) {
        durationMinute += 60;
        durationHour--;
    }

    // 如果小时为负数或者小时和分钟都是0(24小时完整周期),需要调整
    if (durationHour < 0 || (durationHour == 0 && durationMinute == 0)) {
        durationHour += 24;
    }

    printf("O JOGO DUROU %d HORA(S) E %d MINUTO(S)\n", durationHour, durationMinute);

    return 0;
}



我呼吸了
5小时前

题目描述

给定一个长度为 $n$ 的整数数列,请你计算数列中的逆序对的数量。

逆序对的定义如下:对于数列的第 $i$ 个和第 $j$ 个元素,如果满足 $i < j$ 且 $a[i] > a[j]$,则其为一个逆序对;否则不是。

输入格式

第一行包含整数 $n$,表示数列的长度。

第二行包含 $n$ 个整数,表示整个数列。

输出格式

输出一个整数,表示逆序对的个数。

数据范围

$1 \le n \le 100000$,
数列中的元素的取值范围 $[1,10^9]$。

输入样例:

6
2 3 4 5 6 1

输出样例:

5


算法

(归并排序) $O(nlgn)$

C++ 代码

#include <iostream>

using namespace std;

const int N = 100010;
int n, a[N], t[N];

long long merge_sort(int l, int r)
{
    if(l >= r) return 0;

    int mid = (l + r) / 2;

    long long cnt = merge_sort(l, mid) + merge_sort(mid + 1, r);

    int i = l, j = mid + 1, k = 0;

    while(i <= mid && j <= r)
    {
        if(a[i] <= a[j]) t[k ++] = a[i ++];
        else
        {
            cnt += (mid - i + 1);
            t[k ++] = a[j ++];
        }
    }

    while(i <= mid) t[k ++] = a[i ++];
    while(j <= r) t[k ++] = a[j ++];

    for(int i = l, k = 0; i <= r; i ++, k ++) a[i] = t[k];

    return cnt;

}

int main()
{
    cin >> n;
    for (int i = 0; i < n; i ++ ) cin >> a[i];

    cout << merge_sort(0, n - 1) << endl;

    return 0;
}



Jerrywang
6小时前

$f(i) = \max(f(j)+a(s_i-s_j)^2+b(s_i-s_j)+c)$
$f(i) = f(j)+as_i^2-2as_is_j+as_j^2+bs_i-bs_j+c$
$2as_is_j+f(i)-as_i^2-bs_i-c = f(j)+as_j^2-bs_j$
$\underbrace{f(j)+as_j^2-bs_j}_{y} = \underbrace{2as_i}_k \underbrace{s_j}_x+\underbrace{f(i)-as_i^2-bs_i-c}_b$

求最大值需要维护上凸包。

// Title:  特别行动队
// Source: APIO2010
// Author: Jerrywang
#include <bits/stdc++.h>
#define rep(i, s, t) for(int i=s; i<=t; ++i)
#define F first
#define S second
#define pii pair<int, int>
#define ll long long
#define debug(x) cout<<#x<<":"<<x<<endl;
const int N=1000010, inf=1e9;
using namespace std;

ll n, a, b, c, f[N], s[N];
ll Y(int j) {return f[j]+a*s[j]*s[j]-b*s[j];}
ll K(int i) {return 2*a*s[i];}
ll X(int j) {return s[j];}
double slope(int i, int j)
{
    if(X(j)==X(i)) return inf;
    return 1.*(Y(j)-Y(i))/(X(j)-X(i));
}
int q[N], hh, tt;

int main()
{
    scanf("%lld%lld%lld%lld", &n, &a, &b, &c);
    rep(i, 1, n) scanf("%lld", s+i), s[i]+=s[i-1];
    rep(i, 1, n)
    {
        while(hh<tt && slope(q[hh], q[hh+1])>=K(i)) hh++;
        int j=q[hh];
        f[i]=f[j]+a*(s[i]-s[j])*(s[i]-s[j])+b*(s[i]-s[j])+c;
        while(hh<tt && slope(q[tt-1], q[tt])<=slope(q[tt], i)) tt--;
        q[++tt]=i;
    }
    printf("%lld", f[n]);

    return 0;
}



Sapphire666
6小时前
#include<iostream>
#include<cstring>

using namespace std;

const int N=30;

char g[N][N];
int n,m,cnt;
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};

void dfs(int x,int y)
{   
    g[x][y]='#';
    cnt++;
    for(int i=0;i<4;i++)
    {
        int a=x+dx[i],b=y+dy[i];
        if(a<1 || a>n || b<1 || b>m || g[a][b]=='#') continue;
        dfs(a,b);
    }
}


int main()
{   int x,y;
    while(cin>>m>>n,n||m)
    {
        cnt=0;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
            {
                cin>>g[i][j];
                if(g[i][j]=='@')
                {
                    x=i,y=j;
                }
            }

        dfs(x,y);
        cout<< cnt <<endl;
    }
    return 0;
}






糖糖_7
6小时前

为什么要用double



新鲜事 原文

github上面的源码可以学习么 没跑通过 想问问大佬是如何学习的呀


新鲜事 原文

琅琊
6小时前
https://www.acwing.com/file_system/file/content/whole/index/content/10631328/


新鲜事 原文

Finn2009
6小时前
哦不!
图片 图片