A:数字方阵

题目描述

牛客小白月赛2 总是对数字的神秘感感到好奇。这次,他在纸上写下了 牛客小白月赛2 个从 牛客小白月赛2牛客小白月赛2 的数字,并把这些数字排成了 牛客小白月赛2 的方阵。他惊奇地发现,这个方阵中每行、每列和两条主对角线上的数字之和都不一样。他想要更多的方阵,但他再写不出来了。于是他㕛跑来找你,请你给他一个边长为 牛客小白月赛2 的满足上述性质的方阵。

输入描述:

输入共一行,一个整数 
牛客小白月赛2
 ,意义同题面描述。

输出描述:

输出共 
牛客小白月赛2
 行,每行 
牛客小白月赛2
 个整数,表示答案方阵。
输出任意一种可行方案即可。
示例1

输入

3

输出

1 2 3
8 9 4
7 6 5

备注:

牛客小白月赛2
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <stack>
#include <cstdlib>
#include <iomanip>
#include <cmath>
#include <cassert>
#include <ctime>
#include <map>
#include <set>
using namespace std;
#pragma comment(linker, "/stck:1024000000,1024000000")
#define lowbit(x) (x&(-x))
#define max(x,y) (x>=y?x:y)
#define min(x,y) (x<=y?x:y)
#define MAX 100000000000000000
#define MOD 1000000007
#define pi acos(-1.0)
#define ei exp(1)
#define PI 3.1415926535897932384626433832
#define ios() ios::sync_with_stdio(true)
#define INF 0x3f3f3f3f
#define mem(a) ((a,0,sizeof(a)))
#define ll long long
int a[1003][1003];
int main()
{
    int n,tot=1;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<n;j++)
            a[i][j]=tot++;
    }
    for(int i=1;i<=n;i++)
        a[i][n]=tot++;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            printf("%d%c",a[i][j],j==n?'\n':' ');
        }
    }
    return 0;
}

B:小马过河

题目描述

牛客小白月赛2 开始涉猎几何领域了。他现在正在研究小马喝水问题。
众所周知,这个问题中有一匹口渴的小马,一条笔直的河,以及小马的家。小马需要去河边喝水,然后再去家里。它需要走最短的路径。
牛客小白月赛2
解决这个问题也很简单,其中有一个步骤是要做小马家关于河水的对称点。
牛客小白月赛2 正对此感到一些烦恼。他不会做这个。他想请你帮他作一条过小马家且垂直于河水的线,然后告诉 牛客小白月赛2 垂足的位置。

输入描述:

第一行一个整数 
牛客小白月赛2
 ,表示 
牛客小白月赛2
 的询问个数。
接下去
牛客小白月赛2
 行,每行 
牛客小白月赛2
 个实数 
牛客小白月赛2
,表示小马家在点 
牛客小白月赛2
 ,河水为直线 
牛客小白月赛2

输出描述:

输出共 
牛客小白月赛2
 行,每行两个实数 
牛客小白月赛2
, 表示答案垂足点的坐标 
牛客小白月赛2
。 
当你的答案与标准输出的误差小于 牛客小白月赛2 时,视为答案正确。
示例1

输入

3
0 1 0 0 1 1
2.13 -6.89 1.78 1.20 -7.73 0.56
3.473 -4.326 -4.851 -0.819 2.467 -2.729

输出

0.5000000 0.5000000
1.5864392 1.1869738
3.7990750 -3.076672

备注:

牛客小白月赛2

牛客小白月赛2
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <stack>
#include <cstdlib>
#include <iomanip>
#include <cmath>
#include <cassert>
#include <ctime>
#include <map>
#include <set>
using namespace std;
#pragma comment(linker, "/stck:1024000000,1024000000")
#define lowbit(x) (x&(-x))
#define max(x,y) (x>=y?x:y)
#define min(x,y) (x<=y?x:y)
#define MAX 100000000000000000
#define MOD 1000000007
#define pi acos(-1.0)
#define ei exp(1)
#define PI 3.1415926535897932384626433832
#define ios() ios::sync_with_stdio(true)
#define INF 0x3f3f3f3f
#define mem(a) ((a,0,sizeof(a)))
#define ll long long
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        double x1,x2,x3,y1,y2,y3,k1,k2;
        cin>>x1>>y1>>x2>>y2>>x3>>y3;
        if(x2==x3) printf("%.8lf %.8lf\n",x2,y1);
        else if(y2==y3)printf("%.8lf %.8lf\n",x1,y2);
        else
        {
            k1=(y3-y2)/(x3-x2);
            k2=(x2-x3)/(y3-y2);
            double x,y;
            x=(y2-y1-(k1*x2-k2*x1))/(k2-k1);
            y=(k2*(y2-y1-k1*x2+k1*x1))/(k2-k1)+y1;
            printf("%.8lf %.8lf\n",x,y);
        }
    }
    return 0;
}

C:真真假假

题目描述

乾为天,刚健中正,自强不息;坤为地,柔顺伸展,厚载万物。
乾卦:天行健,君子以自强不息。困龙得水好运交,不由喜气上眉梢,一切谋望皆如意,向后时运渐渐高。
坤卦:地势坤,君子以厚德载物。肥羊失群入山岗,饿虎逢之把口张,适口充肠心欢喜,卦若占之大吉昌。 
算卦先生来问你,对于每个他给出的 C++ 头文件,请告诉他是否存在。
头文件列表:algorithm, bitset, cctype, cerrno, clocale, cmath, complex, cstdio, cstdlib, cstring, ctime, deque, exception, fstream, functional, limits, list, map, iomanip, ios, iosfwd, iostream, istream, ostream, queue, set, sstream, stack, stdexcept, streambuf, string, utility, vector, cwchar, cwctype

输入描述:

第一行一个正整数 牛客小白月赛2 ,表示询问个数。
接下去 牛客小白月赛2 行,每行一个仅由小写字母构成的字符串 牛客小白月赛2 ,表示一个询问。 

输出描述:

输出共 

牛客小白月赛2

 行,每行一个字符串 

牛客小白月赛2

 表示这个头文件存在,或 

牛客小白月赛2

 表示这个头文件不存在。 
示例1

输入

3
cstdio
splay
fstream

输出

Qian
Kun
Qian

备注:

牛客小白月赛2


牛客小白月赛2

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <stack>
#include <cstdlib>
#include <iomanip>
#include <cmath>
#include <cassert>
#include <ctime>
#include <map>
#include <set>
using namespace std;
#pragma comment(linker, "/stck:1024000000,1024000000")
#define lowbit(x) (x&(-x))
#define max(x,y) (x>=y?x:y)
#define min(x,y) (x<=y?x:y)
#define MAX 100000000000000000
#define MOD 1000000007
#define pi acos(-1.0)
#define ei exp(1)
#define PI 3.1415926535897932384626433832
#define ios() ios::sync_with_stdio(true)
#define INF 0x3f3f3f3f
#define mem(a) ((a,0,sizeof(a)))
#define ll long long
char a[10006]={"algorithm,bitset,cctype,cerrno,clocale,cmath,complex,cstdio,cstdlib,cstring,ctime,deque,exception,fstream,functional,limits,list,map,iomanip,ios,iosfwd,iostream,istream,ostream,queue,set,sstream,stack,stdexcept,streambuf,string,utility,vector,cwchar,cwctype#"};
set<string>s;
string ss,c;
int main()
{
    ss="";
    for(int i=0;a[i]!='#';i++)
    {
        if(a[i]!=',') ss+=a[i];
        else
        {
            s.insert(ss);
            ss="";
        }
    }
    s.insert(ss);
    int n;
    scanf("%d",&n);
    while(n--)
    {
        cin>>c;
        if(s.count(c)) printf("Qian\n");
        else printf("Kun\n");
    }
    return 0;
}

D:虚虚实实

题目描述

震为雷,临危不乱,亨通畅达;巽为风,柔顺伸展,厚载万物。
震卦:洊雷,震,君子以恐惧修省。一口金钟在淤泥,人人拿着当玩石,忽然一日钟悬起,响亮一声天下知。
巽卦:随风,巽,君子以申命行事。一叶孤舟落沙滩,有篙无水进退难,时逢大雨江湖溢,不用费力任往返。 
算卦先生来问你,对于每个他给出的无向图,是否存在一条路径能够经过所有边恰好一次,并且经过所有点?不需要满足最后回到起点。 

输入描述:

第一行一个数 
牛客小白月赛2
 ,表示有 
牛客小白月赛2
 组数据。对与每组数据,第一行有两个数 
牛客小白月赛2
,接下去 
牛客小白月赛2
 行每行两个数 
牛客小白月赛2
 描述一条无向边 
牛客小白月赛2
。图不保证联通。

输出描述:

对于每组数据,如果存在,输出 
牛客小白月赛2
 ,否则输出 
牛客小白月赛2
 。 
示例1

输入

2
2 2
1 1
2 1
4 6
1 3
1 4
1 2
3 2
4 2
4 3

输出

Zhen
Xun

备注:

牛客小白月赛2

牛客小白月赛2

牛客小白月赛2
欧拉路径,欧拉环符合
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <stack>
#include <cstdlib>
#include <iomanip>
#include <cmath>
#include <cassert>
#include <ctime>
#include <map>
#include <set>
using namespace std;
#pragma comment(linker, "/stck:1024000000,1024000000")
#define lowbit(x) (x&(-x))
#define max(x,y) (x>=y?x:y)
#define min(x,y) (x<=y?x:y)
#define MAX 100000000000000000
#define MOD 1000000007
#define pi acos(-1.0)
#define ei exp(1)
#define PI 3.1415926535897932384626433832
#define ios() ios::sync_with_stdio(true)
#define INF 0x3f3f3f3f
#define mem(a) ((a,0,sizeof(a)))
typedef long long ll;
const int maxn = 36;
int degree[maxn];
int ma[maxn][maxn];
int vis[maxn];
int n,m;
int ans;
void init()
{
    memset(ma,0,sizeof(ma));
    memset(vis,0,sizeof(vis));
    memset(degree,0,sizeof(degree));
}
void dfs(int x)
{
    vis[x] = 1;
    for(int i=1;i<=n;i++)
    {
        if(!vis[i] && ma[x][i])
            dfs(i);
    }
    return ;
}
int check()
{
    for(int i=1;i<=n;i++)
    {
        if(degree[i] % 2 != 0)
            ans++;
    }
    return ans;
}

int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&m);
        init();
        int a,b;
        int cnt = 0;
        int flag = 0;
        for(int i=0;i<m;i++)
        {
            scanf("%d%d",&a,&b);
            ma[a][b]=ma[b][a]=1;
            degree[a]++;
            degree[b]++;
        }
        dfs(1);
        ans = 0;
        for(int i=1;i<=n;i++)
        {
            if(!vis[i])
            {
                flag = 1;
                break;
            }
        }
        if(!flag && (check()==2 || check()==0)) printf("Zhen\n");
        else printf("Xun\n");
    }
    return 0;
}

E:是是非非

题目描述

坎为水,险阳失道,渊深不测;离为火,依附团结,光明绚丽。
坎卦:水洊至,习坎;君子以常德行,习教事。一轮明月照水中,只见影儿不见踪,愚夫当财下去取,摸来摸去一场空。
离卦:明两作,离,大人以继明照四方。官人来占主高升,庄农人家产业增,生意买卖利息厚,匠艺占之大亨通。 
有一些石子堆,第 牛客小白月赛2 堆有 牛客小白月赛2 个石子。你和算卦先生轮流从任一堆中任取若干颗石子(每次只能取自一堆,并且不能不取),取到最后一颗石子的人获胜。 
算卦先生来问你,如果你先手,你是否有必胜策略?若是改动其中几个石子堆中石子的数量呢?

输入描述:

第一行两个正整数 牛客小白月赛2,表示有 牛客小白月赛2 个石堆,牛客小白月赛2 次操作。 
第二行 牛客小白月赛2 个整数,第 牛客小白月赛2 个数 牛客小白月赛2 表示第 牛客小白月赛2 个石堆初始有 牛客小白月赛2 个石子。 
接下去 牛客小白月赛2 行,每行两个正整数 牛客小白月赛2 ,表示把第 牛客小白月赛2 堆石子的个数修改成 牛客小白月赛2。操作是累计的,也就是说,每次操作是在上一次操作结束后的状态上操作的。

输出描述:

牛客小白月赛2 行,输出每次操作之后先手是否有必胜策略。
如果有,输出 牛客小白月赛2 ,否则输出 牛客小白月赛2 。 
示例1

输入

5 4
6 7 3 4 5
1 6
2 1
2 4
5 5

输出

Kan
Kan
Li
Li

备注:

牛客小白月赛2

牛客小白月赛2

牛客小白月赛2
尼姆博弈
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <stack>
#include <cstdlib>
#include <iomanip>
#include <cmath>
#include <cassert>
#include <ctime>
#include <map>
#include <set>
using namespace std;
#pragma comment(linker, "/stck:1024000000,1024000000")
#define lowbit(x) (x&(-x))
#define max(x,y) (x>=y?x:y)
#define min(x,y) (x<=y?x:y)
#define MAX 100000000000000000
#define MOD 1000000007
#define pi acos(-1.0)
#define ei exp(1)
#define PI 3.1415926535897932384626433832
#define ios() ios::sync_with_stdio(true)
#define INF 0x3f3f3f3f
#define mem(a) ((a,0,sizeof(a)))
#define ll long long
ll a[100006];
int main()
{
    ll n,m,x,y,ans,pos;
    scanf("%lld%lld",&n,&m);
    scanf("%lld",&a[1]);
    ans=a[1];
    for(int i=2;i<=n;i++)
    {
        scanf("%lld",&a[i]);
        ans^=a[i];
    }
    while(m--)
    {
        scanf("%lld%lld",&x,&y);
        ans^=a[x];
        a[x]=y;
        ans^=a[x];
        puts(ans?"Kan":"Li");
    }
    return 0;
}

F:黑黑白白

题目描述

艮为山,动静得宜,适可而止;兑为泽,刚内柔外,上下相和。
艮卦:兼山,艮;君子以思不出其位。财帛常打心头走,可惜眼前难到手,不如意时且忍耐,逢着闲事休开口。
兑卦:丽泽,兑;君子以朋友讲习。这个卦象真可取,觉着做事不费力,休要错过这机关,事事觉得随心意。
有一个棋子放在一颗有根树的根上。你和算卦先生轮流把这个棋子向所在点的其中一个儿子移动(只能移动到儿子)。不能再移动就算失败(即棋子所在节点没有儿子)。
算卦先生来问你,如果你先手,你是否有必胜策略? 

输入描述:

第一行一个数 牛客小白月赛2,表示有 牛客小白月赛2 组数据。
接下去每组数据的第一行有两个数 牛客小白月赛2 ,表示树有 牛客小白月赛2 个节点,其中 牛客小白月赛2 为根节点编号(从 牛客小白月赛2 开始编号)。 
接下去 牛客小白月赛2 行每行两个数字 牛客小白月赛2 ,表示点 牛客小白月赛2牛客小白月赛2 之间有一条边。 

输出描述:

每组数据输出一行,
牛客小白月赛2
 表示先手有必胜策略,
牛客小白月赛2
 表示没有。 
示例1

输入

2
3 1
1 2
2 3
5 4
1 2
1 3
3 4
4 5

输出

Dui
Gen

备注:

牛客小白月赛2
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <stack>
#include <cstdlib>
#include <iomanip>
#include <cmath>
#include <cassert>
#include <ctime>
#include <map>
#include <set>
using namespace std;
#pragma comment(linker, "/stck:1024000000,1024000000")
#define lowbit(x) (x&(-x))
#define max(x,y) (x>=y?x:y)
#define min(x,y) (x<=y?x:y)
#define MAX 100000000000000000
#define MOD 1000000007
#define pi acos(-1.0)
#define ei exp(1)
#define PI 3.1415926535897932384626433832
#define ios() ios::sync_with_stdio(true)
#define INF 0x3f3f3f3f
#define mem(a) ((a,0,sizeof(a)))
typedef long long ll;
vector<int>v[10006];
int n,t,root,x,y;
bool dfs(int u,int fa)
{
    for(int i=0;i<v[u].size();i++)
    {
        if(v[u][i]==fa) continue;
        if(!dfs(v[u][i],u)) return 1;
    }
    return 0;
}
int main()
{
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&root);
        for(int i=1;i<=n;i++)
            v[i].clear();
        for(int i=1;i<n;i++)
        {
            scanf("%d%d",&x,&y);
            v[x].push_back(y);
            v[y].push_back(x);
        }
        puts(!dfs(root,0)?"Dui":"Gen");
    }
    return 0;
}

G:文

题目描述

Sεlιнα(Selina) 开始了新一轮的男友海选。她要求她的男友要德智体美劳样样都全。首先进行的是文化知识竞赛。
Sεlιнα 精心准备了一套选择题,每个选择题有且只有一个正确答案。她邀请参赛男友们来答题,并回收了试卷准备批改。可是她却犯了愁。她不知道怎么快速地批改完这些试卷。她知道你是计算机大佬,就跑来请你写个程序帮她批改试卷。
Sεlιнα 会给你一份标准答案,再给你每个参赛男友的答卷。答卷中的每道题可能有一个答案, 也可能没有作答。你要做的是最后告诉 Sεlιнα 谁拿到了最高分,以及最高分的分数(分数为 牛客小白月赛2 分制)。Sεlιнα 喜欢优美的名字,所以如果有同样的分数,请告诉她其中字典序最小的选手名字。
不要偷懒哦!要是你告诉了 Sεlιнα 错误的答案,她会很生气的!

输入描述:

第一行两个整数 牛客小白月赛2,表示有 牛客小白月赛2 道选择题和 牛客小白月赛2 个参赛男友。第二行一个长为 牛客小白月赛2 的字符串,表示标准答案。其中第 牛客小白月赛2 个字母表示第 牛客小白月赛2 个选择题的答案。保证所有字母在 牛客小白月赛2 中。接下去 牛客小白月赛2 行,每两行表示一个参赛男友: 
 · 第一行一个字符串,表示参赛者姓名,保证姓名仅由大小写字母组成;
 · 第二行一个长为 牛客小白月赛2 的字符串,表示该参赛者的答案。其中第 牛客小白月赛2 个字母表示该参赛者对于第 牛客小白月赛2 个选择题的答案。保证所有字母在 牛客小白月赛2 中。牛客小白月赛2 表示该参赛者未作答此题。

输出描述:

输出共两行,第一行是最高分的参赛男友姓名,第二行为其分数。
分数为 牛客小白月赛2 分制,保留两位小数。若有多人同分,输出字典序最小的姓名。 
示例1

输入

5 3
ADBBC
spiderman
ADBAC
niconico
BDXBC
ekstieks
ACBBC

输出

ekstieks
80.00

备注:

牛客小白月赛2

牛客小白月赛2
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <stack>
#include <cstdlib>
#include <iomanip>
#include <cmath>
#include <cassert>
#include <ctime>
#include <map>
#include <set>
using namespace std;
#pragma comment(linker, "/stck:1024000000,1024000000")
#define lowbit(x) (x&(-x))
#define max(x,y) (x>=y?x:y)
#define min(x,y) (x<=y?x:y)
#define MAX 100000000000000000
#define MOD 1000000007
#define pi acos(-1.0)
#define ei exp(1)
#define PI 3.1415926535897932384626433832
#define ios() ios::sync_with_stdio(true)
#define INF 0x3f3f3f3f
#define mem(a) ((a,0,sizeof(a)))
#define ll long long
int n,m;
string s,ss,c,ch;
int main()
{
    int ans=-1;
    scanf("%d%d",&n,&m);
    cin>>c;
    for(int i=0;i<m;i++)
    {
        cin>>ss>>ch;
        int pos=0;
        for(int j=0;j<n;j++)
        {
            if(c[j]==ch[j]) pos++;
        }
        if(ans<pos){s=ss;ans=pos;}
        else if(ans==pos)
        {
            if(s>ss) s=ss;
        }
    }
    cout<<s<<endl;
    printf("%.2lf\n",(100.0*ans)/(n*1.0));
    return 0;
}

H:武

题目描述

其次,Sεlιнα(Selina) 要进行体力比武竞赛。
在 Sεlιнα 所在的城市,有 牛客小白月赛2 个街区,编号为 牛客小白月赛2,总共有 牛客小白月赛2 条的街道连接这些街区, 使得每两个街区之间都直接或间接地有街道将它们相连。Sεlιнα 把通过了文化知识竞赛的参赛男友们召集到她家所在的街区 牛客小白月赛2 ,并以这个街区为起点,让所有参赛男友们向其他街区跑去。这些参赛者们被命令不准重复跑某条街道,而且在规定时间内要尽可能地跑远。比赛结束后,所有参赛者将停留在他们此时所在的街区。之后 Sεlιнα 开始视察结果。现在她知道每个街区都有一些她的参赛男友停留着,她现在想先去看看离她家第 牛客小白月赛2 近的街区。所以作为一位好帮手,你的任务是要告诉她所有街区中,离 Sεlιнα 家第 牛客小白月赛2 近的街区与 Sεlιнα 家之间的距离。 

输入描述:

第一行三个整数,牛客小白月赛2,含义同题面描述。
接下去 牛客小白月赛2 行,每行三个整数,牛客小白月赛2,表示从第 牛客小白月赛2 个街区到第 牛客小白月赛2 个街区有一条权值为牛客小白月赛2 的街道相连。街区从 牛客小白月赛2 开始标号。

输出描述:

输出共一行,一个整数,表示所有街区与 Sεlιнα 家所在街区之间最近距离的第 
牛客小白月赛2
 小值。 
示例1

输入

3 3 2
1 2 4
2 3 5

输出

9
示例2

输入

6 4 3
1 2 7
2 3 2
2 4 2
2 5 10
3 6 3

输出

7

备注:

牛客小白月赛2

牛客小白月赛2

牛客小白月赛2
  姓名长度  
牛客小白月赛2

牛客小白月赛2

牛客小白月赛2
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <stack>
#include <cstdlib>
#include <iomanip>
#include <cmath>
#include <cassert>
#include <ctime>
#include <map>
#include <set>
using namespace std;
#pragma comment(linker, "/stck:1024000000,1024000000")
#define lowbit(x) (x&(-x))
#define max(x,y) (x>=y?x:y)
#define min(x,y) (x<=y?x:y)
#define MAX 100000000000000000
#define MOD 1000000007
#define pi acos(-1.0)
#define ei exp(1)
#define PI 3.1415926535897932384626433832
#define ios() ios::sync_with_stdio(true)
#define INF 0x3f3f3f3f
#define mem(a) ((a,0,sizeof(a)))
#define ll long long
#define pa pair<int,int>
ll n,m,x,y,w,p;
struct node
{
    int to,next,v;
};
node edge[200006];
ll cnt=1,head[200001],dis[200001];
void add(int u,int v,int w,int k)
{
    edge[k].to=v;
    edge[k].next=head[u];
    head[u]=k;
    edge[k].v=w;
}
void dijkstra(int s)
{
    priority_queue<pa,vector<pa>,greater<pa> >q;
    int i,now;
    for (i=1;i<=n;i++)
      dis[i]=0x7fffffff;
    dis[s]=0;
    q.push(make_pair(0,s));
    while (!q.empty())
      {
        now=q.top().second;
        q.pop();
        for (i=head[now];i;i=edge[i].next)
          if (dis[now]+edge[i].v<dis[edge[i].to])
            {
              dis[edge[i].to]=dis[now]+edge[i].v;
              q.push(make_pair(dis[edge[i].to],edge[i].to));
            }
      }
}
int main()
{
    scanf("%d%d%d",&n,&m,&p);
    int k=0;
    for(int i=0;i<n-1;i++)
    {
        scanf("%d%d%d",&x,&y,&w);
        add(x,y,w,++k);
        add(y,x,w,++k);
    }
    dijkstra(m);
    sort(dis+1,dis+n+1);
    printf("%d\n",dis[p+1]);
    return 0;
}

I:艺

题目描述

接下去,Sεlιнα(Selina) 又搞了个文艺竞演。
虽说是文艺竞演,其实只是为了满足 Sεlιнα 的内心企盼——看群男友献歌献舞。她排列好了各个参赛男友的节目顺序,然后将他们安排在两个舞台上表演,自己则在演播室里使用两台闭路电视同时观看。万万没想到的是,当一切准备就绪时,其中一台电视炸了,她不会修,也没有时间修。于是只能尴尬地使用一台闭路电视观看两个舞台上的节目。当然,这台电视不支持分屏同时观看,所以 Sεlιнα 只能不停地换台观看。现在,作为导演的 Sεlιнα 已经知道了两个舞台的节目 单以及每个节目 牛客小白月赛2 对于她所能产生的愉悦度 牛客小白月赛2 ,她想安排电视在每个时刻播放的频道(可以在某些时刻不看),使得自己能得到最大的愉悦度。现在请优秀的你告诉 Sεlιнα 最大能产生的愉悦度是多少。
要注意的是,文艺竞演没有广告插播,所以当一个节目结束时,另一个节目会立刻开始演出。 并且 Sεlιнα 看节目以分钟为单位,也就是说,她只能在每分钟结束的那一刻切换舞台。节目对 Sεlιнα 产生愉悦度是以分钟为单位的,也就是说,她看第 牛客小白月赛2 个节目每一分钟就会产生 牛客小白月赛2 的愉悦度。而 Sεlιнα 对节目的完整性丝毫不在意,没有完整地看一个节目是没有关系的。 

输入描述:

第一行三个数 牛客小白月赛2,表示舞台一有 牛客小白月赛2 个节目,舞台二有 牛客小白月赛2 个节目,总时长为 牛客小白月赛2 分钟。
接下去 牛客小白月赛2 行,每行两个整数 牛客小白月赛2 ,表示舞台一的第 牛客小白月赛2 个节目在第 牛客小白月赛2 分钟结束后开始,每分钟能产生愉悦度 牛客小白月赛2 。当一个节目开始时,这个舞台之前正在播放的节目直接停止,中间没有暂停。
接下去 牛客小白月赛2 行,每行两个整数 牛客小白月赛2 ,表示舞台二的第 牛客小白月赛2 个节目在第 牛客小白月赛2 分钟结束后开始,每分钟能产生愉悦度 牛客小白月赛2 。当一个节目开始时,这个舞台之前正在播放的节目直接停止,中间没有暂停。
数据保证每个舞台都有一个在 牛客小白月赛2 分钟时开始的节目(即最开始的节目),并且在同一个舞台中没有两个节目开始时间相同(即没有一个节目时长为 牛客小白月赛2)。数据不保证输入中每个舞台的 牛客小白月赛2 会从小到大排序。 

输出描述:

输出共一行,一个整数,表示最大的愉悦度。
示例1

输入

2 2 5
2 3
0 2
0 3
3 1

输出

15

说明

在这个样例中,Sεlιнα 在开始时观看频道二的节目,每分钟产生愉悦度 牛客小白月赛2 ;在第二分钟结束时刻切换到频道一,每分钟产生愉悦度 牛客小白月赛2 ,然后直到结束。总共产生愉悦度 牛客小白月赛2 。 
示例2

输入

3 4 17
8 3
0 10
9 10
7 15
0 6
16 9
14 8

输出

205

备注:

牛客小白月赛2

牛客小白月赛2

牛客小白月赛2
模拟
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <stack>
#include <cstdlib>
#include <iomanip>
#include <cmath>
#include <cassert>
#include <ctime>
#include <map>
#include <set>
using namespace std;
#pragma comment(linker, "/stck:1024000000,1024000000")
#define lowbit(x) (x&(-x))
#define max(x,y) (x>=y?x:y)
#define min(x,y) (x<=y?x:y)
#define MAX 100000000000000000
#define MOD 1000000007
#define pi acos(-1.0)
#define ei exp(1)
#define PI 3.1415926535897932384626433832
#define ios() ios::sync_with_stdio(true)
#define INF 0x3f3f3f3f
#define mem(a) ((a,0,sizeof(a)))
typedef long long ll;
struct node
{
    int u,v,to;
    bool operator<(const node a)
    {
        return a.u>u;
    }
}ans[100005],pos[100005];
int main()
{
    int n,m,t;
    scanf("%d%d%d",&n,&m,&t);
    for(int i=0;i<n;i++)
        scanf("%d%d",&ans[i].u,&ans[i].v);
    sort(ans,ans+n);
    for(int i=0;i<n;i++)
    {
        if(i==n-1) ans[i].to=t;
        else ans[i].to=ans[i+1].u;
    }
    for(int i=0;i<m;i++)
        scanf("%d%d",&pos[i].u,&pos[i].v);
    sort(pos,pos+m);
    for(int i=0;i<m;i++)
    {
        if(i==m-1) pos[i].to=t;
        else pos[i].to=pos[i+1].u;
    }
    int l=0,r=0,now=0;
    ll cnt=0,inf=0,top=0;
    while(1)
    {
        inf=max(ans[l].v,pos[r].v);
        top=min(ans[l].to,pos[r].to)-now;
        if(inf>0) cnt+=inf*top;
        now=min(ans[l].to,pos[r].to);
        if(now==ans[l].to) l++;
        if(now==pos[r].to) r++;
        if(now==t) break;
    }
    printf("%lld\n",cnt);
    return 0;
}

J:美

题目描述

最后,Sεlιнα(Selina) 开始了选美大赛。 一如既往地,Sεlιнα 想最大化自己的愉悦度。她品味十分独特,对“美”有自己独到的见解。 她给每位经过层层选拔来到这一关的参赛男友都定义了一个帅气值 牛客小白月赛2 。Sεlιнα 需要将这些参赛者排成一排,她对于这个排列的“美”值的定义是: 
牛客小白月赛2
其中 牛客小白月赛2 表示排列中第 牛客小白月赛2 个人的帅气值。特别地,当 牛客小白月赛2 时,有 牛客小白月赛2
她依旧想使自己获得最大的愉悦值,所以她要使这个排列的 牛客小白月赛2 值尽可能地大。聪明的你,快来告诉 Sεlιнα,这个最大的值是多少。 

输入描述:

第一行一个整数 牛客小白月赛2 ,表示有 牛客小白月赛2 个男友。
第二行 牛客小白月赛2 个整数,第 牛客小白月赛2 个数表示值 牛客小白月赛2 。 

输出描述:

输出共一行,一个整数,表示最大的 
牛客小白月赛2
 值。 
示例1

输入

5
7 3 15 12 8

输出

34
示例2

输入

7
-2 0 8 9 -5 3 10

输出

68

备注:

牛客小白月赛2

牛客小白月赛2
贪心思想,两个大的之间插入个小的
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <stack>
#include <cstdlib>
#include <iomanip>
#include <cmath>
#include <cassert>
#include <ctime>
#include <map>
#include <set>
using namespace std;
#pragma comment(linker, "/stck:1024000000,1024000000")
#define lowbit(x) (x&(-x))
#define max(x,y) (x>=y?x:y)
#define min(x,y) (x<=y?x:y)
#define MAX 100000000000000000
#define MOD 1000000007
#define pi acos(-1.0)
#define ei exp(1)
#define PI 3.1415926535897932384626433832
#define ios() ios::sync_with_stdio(true)
#define INF 0x3f3f3f3f
#define mem(a) ((a,0,sizeof(a)))
#define ll long long
ll a[200005],b[200005],n;
ll ans=0;
int main()
{
    scanf("%lld",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%lld",&a[i]);
    }
    sort(a,a+n);
    int l=0,r=n-1;
    for(int i=0;i<n;i++)
    {
        if(i&1) b[i]=a[l++];
        else b[i]=a[r--];
    }
    for(int i=0;i<n;i++)
    {
        if(i==0) ans+=abs(b[i]-b[n-1]);
        else ans+=abs(b[i]-b[i-1]);
    }
    printf("%lld\n",ans);
    return 0;
}

 

相关文章: