太戈编程 51~80题目答案

注:如果某代码没有AC,在下面留言标题号找我

上一篇(31~50)是不是还没过瘾啊,这次我又来了hh

51

题目描述

学校里有一个水房,水房里一共装有 m 个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为 1 现在有 n 名同学准备接水,他们的初始接水顺序已经确定。将这些同学按接水顺序从 1到 n 编号,i 号同学的接水量为 wi。接水开始时,1 到 m 号同学各占一个水龙头,并同时打开水龙头接水。当其中某名同学 j 完成其接水量要求 wj后,下一名排队等候接水的同学 k马上接替 j 同学的位置开始接水。这个换人的过程是瞬间完成的,且没有任何水的浪费。即j 同学第 x 秒结束时完成接水,则 k 同学第 x+1 秒立刻开始接水。若当前接水人数n不足 m,则只有n个龙头供水,其它 m−n个龙头关闭 现在给出 n 名同学的接水量,按照上述接水规则,问所有同学都接完水需要多少秒

输入输出格式

输入格式

输入文件water.in
第 1 行 2 个整数n(1<=n<=10000)和 m(1<=m<=100),分别表示接水人数和龙头个数
第 2 行 n 个整数 w1、w2、……、wn(<=100),表示 i 号同学的接水量

输出格式

输出文件water.out
1 个整数,表示接水所需的总时间

输入输出样例

输入样例#1:复 制

8 4 
23 71 87 32 70 93 80 76

输出样例#1:复 制

163

输入样例#2:复 制

输出样例#2:复 制

输入样例#3:复 制

输出样例#3:复 制

说明

鸟啼花发柳含烟,掷却风光忆少年  更上高楼望江水,故乡何处一归船

#include<bits/stdc++.h>
using namespace std;
int n,m;
multiset<int> s;
int main(){
	freopen("water.in","r",stdin);
	freopen("water.out","w",stdout);
	cin>>n>>m;
	for(int i=1;i<=m;i++) s.insert(0);
	for(int i=1;i<=n;i++){
		int x;
		cin>>x;
		int t=*s.begin();
		s.erase(s.begin());
		s.insert(t+x);
	}
	cout<<*s.rbegin();
	return 0;
}

52

题目描述

和所有人一样,奶牛喜欢变化。它们正在设想新造型的牧场。奶牛建筑师lester想建造围有漂亮白色栅栏的三角形牧场。她拥有N(3≤N≤40)块木板,每块的长度Li(1≤Li≤40)都是整数,她想用所有的木板围成一个三角形使得牧场面积最大 请帮助lester构造这样的牧场,并计算出这个最大牧场的面积

输入输出格式

输入格式

第1行一个整数N,第2行包含N整数,即是木板长度

输出格式

一个整数:最大牧场面积乘以100然后舍尾的结果。如果无法构建,输出-1

输入输出样例

输入样例#1:复 制

5
1 1 3 3 4

输出样例#1:复 制

692

输入样例#2:

输出样例#2:

输入样例#3:

输出样例#3:

说明

耕犁千亩实千箱,力尽筋疲谁复伤 但愿众生皆得饱,不辞羸病卧残阳

#include<bits/stdc++.h>
using namespace std;
int n,a[41],ans=-1;
void wash(){
    for(int i=1;i<=n;i++){
        int t=rand()%n;
        a[0]=a[t];
        a[t]=a[i];
        a[i]=a[0];
    }
}
int hl(double aa,double bb,double cc){
    if(aa+bb>cc&&bb+cc>aa&&aa+cc>bb){
        double p=(aa+bb+cc)/2;
        return trunc(sqrt(p*(p-aa)*(p-bb)*(p-cc))*100);
    }
    else return -1;
}
void work(){
    int p[3],pos;
    p[0]=a[1];p[1]=a[2];p[2]=a[3];
    for(int i=4;i<=n;i++){
        int min=0x7fffffff;
        for(int j=0;j<=2;j++){
            if(min>p[j]){
                min=p[j];
                pos=j;
            }
        }
        p[pos]+=a[i];
    }
    ans=max(ans,hl(p[0],p[1],p[2]));
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=10000;i++){
        wash();
        work();    
    }
    cout<<ans;
    return 0;
}

53

题目描述

在双人对决的竞技性比赛,如乒乓球、羽毛球、国际象棋中,最常见的赛制是淘汰赛和循环赛。前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高。后者的特点是较为公平,偶然性较低,但比赛过程往往十分冗长 本题中介绍的瑞士轮赛制,因最早使用于1895年在瑞士举办的国际象棋比赛而得名。它可以看作是淘汰赛与循环赛的折衷,既保证了比赛的稳定性,又能使赛程不至于过长 2*N 名编号为1~2N的选手共进行R轮比赛。每轮比赛开始前,以及所有比赛结束后,都会按照总分从高到低对选手进行一次排名。选手的总分为第一轮开始前的初始分数加上已参加过的所有比赛的得分和。总分相同的,约定编号较小的选手排名靠前 每轮比赛的对阵安排与该轮比赛开始前的排名有关:第1名和第2名、第3名和第4名……第2N–1名和第2N名,各进行一场比赛。每场比赛胜者得1分,负者得 0 分。也就是说除了首轮以外,其它轮比赛的安排均不能事先确定,而是要取决于选手在之前比赛中的表现 现给定每个选手的初始分数及其实力值,试计算在R 轮比赛过后,排名第 Q 的选手编号是多少。我们假设选手的实力值两两不同,且每场比赛中实力值较高的总能获胜

输入输出格式

输入格式

输入文件swiss.in
第一行是三个正整数N (≤100000)、R (≤50)、Q (≤2N),每两个数之间用一个空格隔开,表示有2*N名选手、R轮比赛,以及我们关心的名次Q

第二行是2*N 个非负整数s1, s2, …, s2N,每两个数之间用一个空格隔开,其中 si 表示编号为i 的选手的初始分数。 第三行是2*N 个正整数w1 , w2 , …, w2N,每两个数之间用一个空格隔开,其中 wi 表示编号为i 的选手的实力值

输出格式

输出文件swiss.out
一个整数,即R轮比赛结束后,排名第Q的选手的编号

输入输出样例

输入样例#1:复 制

2 4 2 
7 6 6 7 
10 5 20 15

输出样例#1:复 制

1

输入样例#2:

输出样例#2:

输入样例#3:

输出样例#3:

说明

#include<bits/stdc++.h>
using namespace std;
long long n,r,q;
struct competitor{
    long long power;
    long long point;
    long long num;
};
competitor a[200005],win[200005],lost[200005];
long long kwin,klost;
bool cmp(competitor c,competitor b){
    if(c.point==b.point) return c.num<b.num;
    else return c.point>b.point;
}
int main(){
  	freopen("swiss.in","r",stdin);
  	freopen("swiss.out","w",stdout);
    cin>>n>>r>>q;
    n=2*n;
    for(int i=0;i<n;i++){
        cin>>a[i].point;
        a[i].num=i+1;
    }
    for(int i=0;i<n;i++) cin>>a[i].power;
    sort(a+0,a+n,cmp);
    while(r--){
        for(int i=0;i<n-1;i=i+2){
            if(a[i].power>a[i+1].power){
                a[i].point++;
                win[kwin]=a[i];
                lost[klost]=a[i+1];
                klost++;
                kwin++;
            }
            else{
                a[i+1].point++;
                win[kwin]=a[i+1];
                lost[klost]=a[i];
                klost++;
                kwin++;
            }
        }
        merge(win+0,win+kwin,lost+0,lost+klost,a,cmp);
        klost=0;
        kwin=0;
    }
    cout<<a[q-1].num<<endl;
    return 0;
}

54

题目描述

从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行列相对顺序)称为原矩阵的一个子矩阵。

9

3

3

3

9

9

4

8

7

4

1

7

4

6

6

6

8

5

6

9

7

4

5

6

1

例如,此矩阵中选取第2、4行和第2、4、5列交叉位的元素得到一个2*3子矩阵

4

7

4

8

6

9

矩阵的分值=矩阵中每一对相邻元素之差的绝对值之和。

给定一个n行m列的正整数矩阵,请你从这个矩阵中选出一个r行c列的子矩阵,使得这个子矩阵的分值最小,并输出这个分值

输入输出格式

输入格式

输入文件为submatrix.in
第一行包含用空格隔开的四个整数n,m,r,c,意义如问题描述中所述,每两个整数之间用一个空格隔开。n,m<=16
接下来的n行,每行包含m个整数,表示问题描述中那个n行m列的矩阵(值<=1000)

输出格式

输出文件为submatrix.out
1个整数,表示满足题目描述的子矩阵的最小分值

输入输出样例

输入样例#1:复 制

5 5 2 3
9 3 3 3 9
9 4 8 7 4
1 7 4 6 6
6 8 5 6 9
7 4 5 6 1

输出样例#1:复 制

6

输入样例#2:

输出样例#2:

输入样例#3:

输出样例#3:

说明

数据范围说明:

对于50%的数据,1<=n<=12,1<=m<=12,每个元素1<=a[i][j]<=20

对于100%的数据,1<=n<=16,1<=m<=16,每个元素1<=a[i][j]<=1000,1<=r<=n,1<=c<=m

#include<bits/stdc++.h>
using namespace std;
int lc[20]={0},hc[20][20]={0},f[20][20],ch[20]={0},sss=1,num[20][20]={0},n,m,r,c,minn=2e9,ss;
void lzh(){
    for(int i=1;i<=m;i++){
        lc[i]=0;
        for(int j=1;j<r;j++){
            lc[i]+=abs(num[ch[j]][i]-num[ch[j+1]][i]);
        }
    }
    for(int i=2;i<=m;i++){
        for(int j=1;j<i;j++){
            hc[i][j]=0;
            for(int k=1;k<=r;k++){
                hc[i][j]+=abs(num[ch[k]][i]-num[ch[k]][j]);
            }
        }
    }
}void lzw(){
    for(int i=1;i<=m;i++){
        ss=min(i,c);
        for(int j=1;j<=ss;j++){
            if(j==1){
                f[i][j]=lc[i];
            }else
            if(i==j){
                f[i][j]=f[i-1][j-1]+lc[i]+hc[i][j-1];
            }else{
                f[i][j]=2e8;
                for(int k=j-1;k<i;k++){
                    f[i][j]=min(f[i][j],f[k][j-1]+lc[i]+hc[i][k]);
                }
            }
            if(j==c){
                minn=min(minn,f[i][c]);
            }
        }
    }
}void lzp(int node){
    if(node>n){
        lzh();
        lzw();
        return;
    }
    if(r-sss+1==n-node+1){
        ch[sss++]=node;
        lzp(node+1);
        ch[sss--]=0;
        return;
    }
    lzp(node+1);
    if(sss<=r){
        ch[sss++]=node;
        lzp(node+1);
        ch[sss--]=0;
    }
}
int main(){
  	freopen("submatrix.in","r",stdin);
  	freopen("submatrix.out","w",stdout);
    cin>>n>>m>>r>>c;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
           cin>>num[i][j];
    lzp(1);
    cout<<minn;
  	return 0;
}

55

题目描述

一条狭长的纸带被均匀划分出了n个格子,格子编号从1到n。每个格子上都染了一种颜色color_i用[1,m]当中的一个整数表示),并且写了一个数字number_i 定义一种特殊的三元组(x,y,z),其x,y,z都代表纸带上格子的编号,要求满足以下两个条件: 

1.xyz是整数,x<y<z,y-x=z-y 

2.colorx=colorz 满足上述条件的三元组的分数规定为(x+z)*(number_x+number_z)。

整个纸带的分数规定为所有满足条件的三元组的分数的和。这个分数可能会很大,你只要输出整个纸带的分数除以10007所得的余数

输入输出格式

输入格式

第一行是两个正整数n和m(<=100000),n表纸带上格子的个数,m表纸带上颜色的种类数
第二行有n用空格隔开的正整数,第i数字number表纸带上编号为i格子上面写的数字
第三行有n用空格隔开的正整数,第i数字color表纸带上编号为i格子染的颜色

输出格式

一个整数,表示所求的纸带分数除以10,007所得的余数

输入输出样例

输入样例#1:复 制

6 2
5 5 3 2 2 2
2 2 1 1 2 1

输出样例#1:复 制

82

输入样例#2:

输出样例#2:

输入样例#3:

输出样例#3:

说明

#include<bits/stdc++.h>
using namespace std;
int s[100005][2],sum[100005][2],c[100005],x[100005],n,m,ans;
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>x[i];
	for(int i=1;i<=n;i++){
		cin>>c[i];
		s[c[i]][i%2]++;
		sum[c[i]][i%2]=(sum[c[i]][i%2]+x[i])%10007;
	}
	for(int i=1;i<=n;i++)
		ans=(ans+i*((s[c[i]][i%2]-2)*x[i]%10007+sum[c[i]][i%2]))%10007;
	cout<<ans;
	return 0;
}

56

题目描述

某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树 由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树

输入输出格式

输入格式

输入文件tree.in
第一行有两个整数L(1<=L<=1000000)和 M(0<=M<=10000),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。注意:起点可能大于终点

输出格式

输出文件tree.out
一个整数,表示马路上剩余的树的数目

输入输出样例

输入样例#1:复 制

500 3
150 300
100 200
470 471

输出样例#1:复 制

298

输入样例#2:复 制

5 1
0 1

输出样例#2:复 制

4

输入样例#3:

输出样例#3:

说明

挖掘机技术哪家强,中国山东找蓝翔

#include<bits/stdc++.h>
using namespace std;
int l,m,d[1000009],s[1000009],cnt=1;
int main(){
	freopen("tree.in","r",stdin);
	freopen("tree.out","w",stdout);
	cin>>l>>m;
	for(int i=1;i<=m;i++){
		int x,y;
		cin>>x>>y;
		if(x>y) swap(x,y);
		d[x]++;
		d[y+1]--;
	}
	for(int i=1;i<=l;i++) s[i]=s[i-1]+d[i];
	for(int i=1;i<=l;i++) if(s[i]==0) cnt++;
	cout<<cnt;
	return 0;
}

57

题目描述

恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变。守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上。为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会沉下去。到那时,岛上的所有人都会遇难。守望者的跑步速度为17m/s,以这样的速度是无法逃离荒岛的。庆幸的是守望者拥有闪烁法术,可在1s内移动60m,不过每次使用闪烁法术都会消耗魔法值10点。守望者的魔法值恢复的速度为4点/s,只有处在原地休息状态时才能恢复。 现在已知守望者的魔法初值M,他所在的初始位置与岛的出口之间的距离S,岛沉没的时间T。你的任务是写一个程序帮助守望者计算如何在最短的时间内逃离荒岛,若不能逃出,则输出守望者在剩下的时间内能走的最远距离。注意:守望者跑步、闪烁或休息活动均以秒(s)为单位,且每次活动的持续时间为整数秒。距离的单位为米(m)

输入输出格式

输入格式

输入文件escape.in 输入三个非负整数M(<=1000), S(<=100000000), T(<=300000)

输出格式

输出文件escape.out 输出第1行为字符串“Yes”或“No”(区分大小写),即守望者是否能逃离荒岛。
第2行包含一个整数。第一行为“Yes”(区分大小写)时表示守望者逃离荒岛的最短时间;第一行为“No”(区分大小写)时表示守望者能走的最远距离

输入输出样例

输入样例#1:复 制

39 200 4

输出样例#1:复 制

No
197

输入样例#2:复 制

36 255 10

输出样例#2:复 制

Yes
6

输入样例#3:复 制

输出样例#3:复 制

说明

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int f[N],m,s,t,maxn;
bool flag=false;
int main(){
	freopen("escape.in","r",stdin);
	freopen("escape.out","w",stdout);
	cin>>m>>s>>t;
	for(int i=1;i<=t;i++){
		if(m>=10){
			f[i]=f[i-1]+60;
			m-=10;
		}
		else{
			f[i]=f[i-1];
			m+=4;
		}
	}
	for(int i=1;i<=t;i++) f[i]=max(f[i],f[i-1]+17);
	for(int i=1;i<=t;i++){
		if(f[i]>=s){
			cout<<"Yes"<<endl<<i;
			flag=true;
			break;
		}
	}
	if(!flag) cout<<"No"<<endl<<f[t];
	return 0;
}

58我的代码试过了,AC不了。

59

题目描述

火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上、下车,但上、下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人。从第3站起(包括第3站)上、下车的人数有一定规律:上车的人数都是前两站上车人数之和,而下车人数等于上一站上车人数,一直到终点站的前一站(第n-1站),都满足此规律。现给出的条件是:共有N个车站,始发站上车的人数为a,最后一站下车的人数是m(全部下车)。试问x站开出时车上的人数是多少

输入输出格式

输入格式

输入文件station.in
a(0<=a<=20),n(1<=n<=20),m(0<=m<=2000),和x(1<=x<=20)

输出格式

输出文件station.out
从x站开出时车上的人数

输入输出样例

输入样例#1:复 制

5 7 32 4

输出样例#1:复 制

13

输入样例#2:

输出样例#2:

输入样例#3:

输出样例#3:

说明

#include<bits/stdc++.h>
using namespace std;
const int N=2e4+1;
int A[N],B[N],F[N];
int main(){
	freopen("station.in","r",stdin);
	freopen("station.out","w",stdout);
    int a,n,m,x; 
	cin>>a>>n>>m>>x;
  	if(n==1){cout<<0; return 0;}
    A[1]=A[2]=1, A[3]=2;
    B[1]=B[2]=B[3]=0;
    for(int i=4; i<=n-1; i++){
        A[i]=A[i-1]+A[i-2]-1;
        B[i]=B[i-1]+B[i-2]+1;
    }
    int b=(m-A[n-1]*a)/B[n-1];
    F[x]=A[x]*a+B[x]*b;
    cout<<F[x];
    return 0;
}

60

题目描述

2000年是国际数学联盟确定的世界数学年,又恰逢我国著名数学家华罗庚先生诞辰90周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友lester也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目: 设有一个长度为N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大。 同时,为了帮助选手能够正确理解题意,主持人还举了如下的一个例子: 有一个数字串:312, 当N=3,K=1时会有以下两种分法: 1) 3*12=36 2) 31*2=62 这时,符合题目要求的结果是:31*2=62 现在,请你帮助你的好朋友lester设计一个程序,求得正确的答案

输入输出格式

输入格式

第一行共有2个自然数N,K(1≤N≤40,1≤K≤6,K<N)
第二行是一个长度为N的数字串

输出格式

所求得的最大乘积

输入输出样例

输入样例#1:复 制

4 2
1231

输出样例#1:复 制

62

输入样例#2:

输出样例#2:

输入样例#3:

输出样例#3:

说明

神奇妙算古名词,师承前人沿用之 神奇化易是坦道,易化神奇不足提 妙算还从拙中来,愚公智叟两分开 积久方显愚公智,发白才知智叟呆 埋头苦干是第一,熟练生出百巧来 勤能补拙是良训,一分勤劳一分才

#include<bits/stdc++.h>
using namespace std;
int n,k;
char s[55];
struct node{
	int a[50],num;
	node operator *(const node b)const{
		node res;
		res.num=num+b.num;
		for(int i=1;i<=45;i++) res.a[i]=0;
		for(int i=1;i<=num;i++){
			for(int j=1;j<=b.num;j++){
				res.a[i+j-1]+=a[i]*b.a[j];
			}
		}
		for(int i=1;i<=res.num;i++){
			res.a[i+1]+=res.a[i]/10;
			res.a[i]%=10;
		}
		while(res.num>1&&res.a[res.num]==0) res.num--;
		return res;
	}
	bool operator <(const node b)const{
		if(num!=b.num) return num<b.num;
		for(int i=num;i>=1;i--){
			if(a[i]!=b.a[i]) return a[i]<b.a[i];
		}
		return 1;
	}
}dp[50][10];
void print(node x){
	for(int i=x.num;i>=1;i--) cout<<x.a[i];
	cout<<endl;
}
node getnum(int l,int r){
	node res;
	res.num=r-l+1;
	for(int i=l;i<=r;i++){
		res.a[r-i+1]=s[i]-'0';
	}
	while(res.num>1&&res.a[res.num]==0) res.num--;
	return res;
}
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++) cin>>s[i];
	for(int i=1;i<=n;i++){
		dp[i][0]=getnum(1,i);
	}
	for(int j=1;j<=k;j++){
		for(int i=1;i<=n;i++){
			if(j>=i) continue;
			for(int kkk=1;kkk<i;kkk++){
				if(j>kkk) continue;
				dp[i][j]=max(dp[i][j],dp[kkk][j-1]*getnum(kkk+1,i));
			}
		}
	}
	print(dp[n][k]);
	return 0;
}

61

题目描述

我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串 FBI树是一种二叉树,它的结点类型也包括F结点,B结点和I结点三种。由一个长度为2^N的“01”串S可以构造出一棵FBI树T,递归的构造方法如下: 1) T的根结点为R,其类型与串S的类型相同; 2) 若串S的长度大于1,将串S从中间分开,分为等长的左右子串S1和S2;由左子串S1构造R的左子树T1,由右子串S2构造R的右子树T2。 现在给定一个长度为2^N的“01”串,请用上述构造方法构造出一棵FBI树,并输出它的后序遍历序列

输入输出格式

输入格式

第一行是一个整数N(0<=N<=10),第二行是一个长2^N的“01”串

输出格式

一行只包含一个字符串,即FBI树的后序遍历序列

输入输出样例

输入样例#1:复 制

3
10001011

输出样例#1:复 制

IBFBBBFIBFIIIFF

输入样例#2:

输出样例#2:

输入样例#3:

输出样例#3:

说明

#include<bits/stdc++.h>
using namespace std;
string s;
void tree(int x,int y){
    if(y>x){
        tree(x,(x+y)/2);
        tree((x+y+1)/2,y);
    }    
    int B=1,I=1;
    for(int i=0;i<=y-x;i++){
        if(s[x+i]=='1') B=0;
        else if(s[x+i]=='0') I=0;
    }
    if(B) cout<<'B';
 	else if(I) cout<<'I';
    else cout<<'F';
}
int main(){
    int n;
    cin>>n>>s;
    tree(0,(1<<n)-1);
    return 0;
}

62

题目描述

有一天,lester得到了一个长度为n的序列。他闲的胃疼,把这个序列的所有连续子序列都列了出来,并对每一个子序列都求了其平均值,然后他把这些平均值写在纸上,并对它们进行排序,最后他报出了第k小的平均值。然后他找来同样胃疼的你做同样的事情

输入输出格式

输入格式

第一行两个整数n,k(1<=n<=100000,1<=k<=n*(n+1)/2)
第二行n个正整数(<=10^9)

输出格式

一个实数,表示第k小的平均值,保留到小数点后 4 位

输入输出样例

输入样例#1:复 制

6 10
3 5 4 6 1 2

输出样例#1:复 制

3.6667

输入样例#2:复 制

输出样例#2:复 制

输入样例#3:复 制

输出样例#3:复 制

说明

浪花有意千重雪,桃李无言一队春 一壶酒,一竿纶,世上如侬有几人 一棹春风一叶舟,一纶茧缕一轻钩 花满渚,酒满瓯,万顷波中得自由

#include<bits/stdc++.h>
using namespace std;
const long double eps=1e-5;
int n;
long long k;
long double a[100001],b[100001],que[100001];
int merge(int l,int r){
    if(l==r)return 0;
    int mid=(l+r)>>1;
    int res=merge(l,mid)+merge(mid+1,r);
    int lft=l,rht=mid+1,cnt=l-1;
    while(lft<=mid&&rht<=r){
        if(b[rht]<b[lft]){
            que[++cnt]=b[rht];
            res+=mid-lft+1;
            rht++;
        }
        else{
            que[++cnt]=b[lft];
            lft++;
        }
    }
    while(lft<=mid){que[++cnt]=b[lft];lft++;}
    while(rht<=r){que[++cnt]=b[rht];rht++;}
    for(int i=l;i<=r;i++)b[i]=que[i];
    return res;
}
bool judge(long double x){
    for(int i=1;i<=n;i++)
        b[i]=a[i]+b[i-1]-x;
    int res=merge(0,n);
    return res<k;
}
int main(){
    scanf("%d%lld",&n,&k);
    for(int i=1;i<=n;i++)scanf("%Lf",&a[i]);
    long double lft=0.0,rht=1000000000.0;
    while(rht-lft>=eps){
        long double mid=0.5*(lft+rht);
        if(judge(mid))lft=mid;
        else rht=mid;
    }
    printf("%.4Lf",lft);
    return 0;
}

63还没做出来欸

64

题目描述

lester和女朋友jeslie玩游戏,从1900.1.1到2001.11.4这个日期之间随意抽取一个日期出来。然后轮流对这个进行两种操作之一(jeslie先操作): 1:日期的天数加1,如1900.1.1变到1900.1.2 2:月份加1,如1900.1.1变到1900.2.1 如果操作后超过月底或年底,需要进位,如1900.1.31加一天变为1900.2.1。注意有时候会得到不合法的日期,如1900.1.31加一月变成了1900.2.31,这种操作不允许进行。所有的操作均要考虑历法和闰年的规定。谁先将日期变到2001.11.4(他俩第一次见面的日子)谁就赢了。现在jeslie想知道她有没有必胜策略?

输入输出格式

输入格式

一个测试点有多组数据(避免随机蒙答案~)
第一行一个整数t为数据组数(t<=10000)
接下来t行每行三个整数X Y Z表示X年Y月Z日,输入日期保证合法

输出格式

t行,如果有必胜策略输出YES,否则输出NO

输入输出样例

输入样例#1:复 制

3
2001 11 3
2001 11 2
2001 10 3

输出样例#1:复 制

YES
NO
NO

输入样例#2:

输出样例#2:

输入样例#3:

输出样例#3:

说明

嬴氏乱天纪,贤者避其世。黄绮之商山,伊人亦云逝 往迹浸复湮,来径遂芜废。相命肆农耕,日入从所憩 桑竹垂馀荫,菽稷随时艺。春蚕收长丝,秋熟靡王税 荒路暧交通,鸡犬互鸣吠。俎豆犹古法,衣裳无新制 童孺纵行歌,班白欢游诣。草荣识节和,木衰知风厉 虽无纪历志,四时自成岁。怡然有余乐,于何劳智慧 奇踪隐五百,一朝敞神界。淳薄既异源,旋复还幽蔽 借问游方士,焉测尘嚣外。愿言蹑清风,高举寻吾契

#include<bits/stdc++.h>
using namespace std;
int t,x,y,z;
int main(){
	cin>>t;
	while(t--){
		cin>>x>>y>>z;
		if((y+z)%2==0||(y==9||y==11)&&z==30) cout<<"YES"<<endl;
		else cout<<"NO"<<endl;
	}
	return 0;
}

65

题目描述

由n个整数组成的数列,记为b[1], b[2], …, b[n]。若存在i1<i2<i3< … < ie 且有b[i1]< b[i2]< … <b[ie]则称为长度为e的上升子序列。求最长上升子序列(Longest increasing subsequence, LIS)

输入输出格式

输入格式

一行,整数序列. 序列长度<=100000, 每个整数绝对值<=10000

输出格式

最大上升子序列长度

输入输出样例

输入样例#1:复 制

2 1 1 2 3

输出样例#1:复 制

3

输入样例#2:

输出样例#2:

输入样例#3:

输出样例#3:

说明

O(N^2)算法对于大数据会超时

#include<bits/stdc++.h>
#define ll long long
#define M 100000 + 5
using namespace std;
ll a[M];
int f[M],n,len,I;
int main(){
	while(cin>>I) a[++n]=I;
    f[++len]=a[1];
    for(int i=2;i<=n;i++){
        if(a[i]>f[len]) f[++len]=a[i];
        else{
            int s=lower_bound(f,f+len,a[i])-f;
            f[s]=a[i];
        }
    }
    cout<<len;
    return 0;
}

66

题目描述

人类终于登上了火星的土地并且见到了神秘的火星人。人类和火星人都无法理解对方的语言,于是lester大神发明了一种用数字交流的方法。这种交流方法是这样的,首先,火星人把一个非常大的数字告诉人类科学家,科学家破解这个数字的含义后,再把一个很小的数字加到这个大数上面,把结果告诉火星人,作为人类的回答 火星人用一种非常简单的方式来表示数字――掰手指。火星人只有一只手,但这只手上有成千上万的手指,这些手指排成一列,分别编号为1,2,3……。火星人的任意两根手指都能随意交换位置,他们就是通过这方法计数的 一个火星人用一个人类的手演示了如何用手指计数。如果把五根手指――拇指、食指、中指、无名指和小指分别编号为1,2,3,4和5,当它们按正常顺序排列时,形成了5位数12345,当你交换无名指和小指的位置时,会形成5位数12354,当你把五个手指的顺序完全颠倒时,会形成54321,在所有能够形成的120个5位数中,12345最小,它表示1;12354第二小,它表示2;54321最大,它表示120。下表展示了只有3根手指时能够形成的6个3位数和它们代表的数字: 三进制数 123 132 213 231 312 321 代表的数字 1 2 3 4 5 6 现在你有幸成为了第一个和火星人交流的地球人。一个火星人会让你看他的手指,lester会告诉你要加上去的很小的数。你的任务是,把火星人用手指表示的数与科学家告诉你的数相加,并根据相加的结果改变火星人手指的排列顺序。输入数据保证这个结果不会超出火星人手指能表示的范围

输入输出格式

输入格式

第一行有两个正整数N,M表示火星人手指的数目和要加上去的小整数(1 <= N <= 10000,1 <= M <= 100)。下一行是1到N这N个整数的一个排列,用空格隔开,表示火星人手指的排列顺序

输出格式

一行,这一行含有N个整数,表示改变后的火星人手指的排列顺序。每两个相邻的数中间用一个空格分开,不能有多余的空格

输入输出样例

输入样例#1:复 制

5
3
1 2 3 4 5

输出样例#1:复 制

1 2 4 5 3

输入样例#2:

输出样例#2:

输入样例#3:

输出样例#3:

说明

如果你看过《三体II:黑暗森林》,就知道这个题目在扯淡~你可以在注释中骂一下出题人~

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,m,x[10009]={},i=0;
	cin>>n>>m;
	for(int i=0;i<n;i++) cin>>x[i];
	do{
		i++;
		if(i==m+1){
			for(int i=0;i<n;i++) cout<<x[i]<<' ';
			break;
		}
	}while(next_permutation(x,x+n));
	return 0;
}

67

题目描述

在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转180度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。于是他就负责用这座桥将进站的车厢按车厢号从小到大排列。他退休后,火车站决定将这一工作自动化,其中一项重要的工作是编一个程序,输入初始的车厢顺序,计算最少用多少步就能将车厢排序

输入输出格式

输入格式

第一行是车厢总数N(不大于10000),第二行是N个不同的数表示初始车厢顺序

输出格式

一个数据,是最少的旋转次数

输入输出样例

输入样例#1:复 制

4
4 3 2 1 

输出样例#1:复 制

6

输入样例#2:

输出样例#2:

输入样例#3:

输出样例#3:

说明

#include<bits/stdc++.h>
using namespace std;
long long mp[50000],n,cnt=0;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++) cin>>mp[i];
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n-1;j++)
			if(mp[j]>mp[j+1]){
				swap(mp[j],mp[j+1]);
				cnt++;
			}
	}
	cout<<cnt;
	return 0;
}

68

题目描述

共有n名学生的语文成绩要登记,目前登记的成绩是a[1],a[2],…,a[n]。但是语文老师lester写错了不少成绩,所以他要修改成绩的时候,总是累得不行。现在他要修改p次:每次修改行为由三个数字x,y,z表示,代表第x个到第y个学生每人增加z分。他总是要一遍遍地给某些同学增加分数,又要注意最低分是多少。你能帮帮他吗

输入输出格式

输入格式

第一行有两个正整数n和p(p<=n<=500000),代表学生数与加分次数
第二行有n个正整数,a[1],a[2],…a[n],代表各个学生的初始成绩(均不超过100)
接下来p行,每行有三个正整数,x,y,z,代表给第x个到第y个学生每人增加z分(x,y<=n, z<=100)。注意x可能大于y。

输出格式

输出一行,代表更改分数后,全班的最低分是几分。

输入输出样例

输入样例#1:复 制

3 2
1 1 1
1 2 1
2 3 1

输出样例#1:复 制

2

输入样例#2:复 制

输出样例#2:复 制

输入样例#3:复 制

输出样例#3:复 制

说明

#include<bits/stdc++.h>
using namespace std;
int n,m,d[500009],s[500009],students[500009],x,y,z;
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>students[i];
	for(int i=1;i<=n;i++) d[i]=students[i]-students[i-1];
	for(int i=1;i<=m;i++){
		cin>>x>>y>>z;
		if(x>y) swap(x,y);
		d[x]+=z;
		d[y+1]-=z;
	}
	for(int i=1;i<=n;i++) s[i]=s[i-1]+d[i];
	cout<<*min_element(s+1,s+1+n);
	return 0;
}

没有69

70

题目描述

求满足如下条件1-N的全排列P_1,...,P_n的数量:P_i>P_{i/2}(对所有2<=i<=N)。只需要输出模p的余数

输入输出格式

输入格式

一行包含两个整数n(<=1000000)和p(<=1000000000,p为素数)

输出格式

一个整数,要求的值

输入输出样例

输入样例#1:复 制

4 7

输出样例#1:复 制

3

输入样例#2:

输出样例#2:

输入样例#3:

输出样例#3:

说明

n=4需要满足P_2>P_1, P_3>P_1, P_4>P_2,共3种1234 1243 1324

#include<bits/stdc++.h>
#define rg register
#define il inline
#define Min(a,b) (a)<(b)?(a):(b)
#define Max(a,b) (a)>(b)?(a):(b)
#define lol long long
#define ll(x) (x<<1)
#define rr(x) (x<<1|1)
#define in(i) (i=read())
using namespace std;
const int N=1e6+10;
lol read() {
	lol ans=0,f=1; char i=getchar();
	while(i<'0' || i>'9') {if(i=='-') f=-1; i=getchar();}
	while(i>='0' && i<='9') ans=(ans<<1)+(ans<<3)+i-'0',i=getchar();
	return ans*=f;
}
lol n,mod;
lol sum[N]={1},inv[N]={1},dp[N],size[N<<1];
lol qpow(lol a,lol x,lol ans=1) {
    while(x) {
        if(x&1) ans=ans*a%mod;
        x>>=1,a=a*a%mod;
    }return ans;
}
void init() {
    for(lol i=1;i<=n;i++) sum[i]=sum[i-1]*i%mod;
    for(lol i=1;i<=n;i++) inv[i]=qpow(sum[i],mod-2);
}
lol C(lol n,lol m) {
    if(m>n) return 0;
    return sum[n]*inv[m]%mod*inv[n-m]%mod;
}
lol Lucas(lol n,lol m) {
    if(!m) return 1;
    return C(n%mod,m%mod)*Lucas(n/mod,m/mod)%mod;
}
int main(){
    in(n),in(mod); init();
    for(int i=n;i>=1;i--) {
        size[i]=size[ll(i)]+size[rr(i)]+1;
        dp[i]=Lucas(size[i]-1,size[ll(i)])*(ll(i)>n?1:dp[ll(i)])%mod*(rr(i)>n?1:dp[rr(i)])%mod;
    }
    cout<<dp[1]<<endl;
  	return 0;
}

71没做出来,有亿点点难

72

题目描述

lester想要建造一个围栏用来围住他的奶牛,可是他资金匮乏。他建造的围栏必须包括他的奶牛喜欢吃草的所有地点。对于给出的这些地点的坐标,计算最短的能够围住这些点的围栏的长度

输入输出格式

输入格式

第一行一个整数N(<=10000)表示放牧点的数目。接下来N行,每行两个实数表示放牧点坐标(绝对值<=1000000)

输出格式

一个实数,表示必须的围栏的长度。答案保留两位小数

输入输出样例

输入样例#1:复 制

4
4 8
4 12
5 9.3
7 8

输出样例#1:复 制

12.00

输入样例#2:

输出样例#2:

输入样例#3:

输出样例#3:

说明

#include<bits/stdc++.h>
using namespace std;
const int N=10005;
struct node{
    double x,y;
}tmp,a[N],p[N];
int n,cnt=1;
double c;
node Minus(node a,node b){
    node res;
    res.x=a.x-b.x; res.y=a.y-b.y;
    return res;
}
double dis(node a,node b){return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));}
double cross(node a,node b){return a.x*b.y-b.x*a.y;}
bool cmp(node p,node q){
    double tmp=cross(Minus(a[1],p),Minus(a[1],q));
    if (tmp>0) return 1;
    if (tmp==0&&dis(a[1],p)<dis(a[1],q)) return 1;
    return 0;
}
int main(){
    scanf("%d",&n);
    for (int i=1;i<=n;++i)
    scanf("%lf%lf",&a[i].x,&a[i].y);
    for (int i=2;i<=n;++i)
    if (a[i].y<a[1].y) tmp=a[i],a[i]=a[1],a[1]=tmp;
    sort(a+2,a+n+1,cmp);
    p[1]=a[1];
    for (int i=2;i<=n;++i){
        while (cnt>1&&cross(Minus(p[cnt-1],p[cnt]),Minus(p[cnt],a[i]))<=0) --cnt;
        p[++cnt]=a[i];
    }
    for (int i=1;i<=cnt;++i)
    c+=dis(p[i],p[i%cnt+1]);
    printf("%0.2lf",c);
    return 0;
}

73

题目描述

对正整数X,f(X)表示X所有约数的和。输入两个正整数X,Y(X<Y),求f(X)+f(X+1)+…+f(Y)

输入输出格式

输入格式

一行两个正整数X,Y(<=1e12)

输出格式

一个正整数,f(X)+f(X+1)+…+f(Y)的值

输入输出样例

输入样例#1:复 制

2 4

输出样例#1:复 制

14

输入样例#2:

输出样例#2:

输入样例#3:

输出样例#3:

说明

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long u;
u n,m;
u do_(u x){
	u res=0,d=1,b;
	while(1){
		b=x/(x/d);
		res+=((b+d)*(b-d+1)/2)*(x/d);
		d=b+1;
		if(x/d==0) break;
	}
	return res;
}
int main(){
	cin>>n>>m;
	cout<<do_(m)-do_(n-1);
	return 0;
}

74太难了啊啊

75

题目描述

一个序列每次可交换其中任意两个数,代价为这两数之和。求将整个序列升序排序的最小代价

输入输出格式

输入格式

第一行一个正整数n(<=100000)
第二行n个正整数(<=10^9,保证两两不同

输出格式

一个正整数,最小代价

输入输出样例

输入样例#1:复 制

6
8 4 5 3 2 7

输出样例#1:复 制

34

输入样例#2:

输出样例#2:

输入样例#3:

输出样例#3:

说明

#include<bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define all(x) x.begin(),x.end()
#define cls(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
typedef pair<int,int> P;
const int dx[]={0,1,0,-1};
const int dy[]={1,0,-1,0};
const int mod=1e9+7;
const int inf=0x3f3f3f3f;
const int maxn=1e5+10;
const double eps=1e-6;
inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
inline ll sqr(ll x){return x*x;}
inline ll fpow(ll a,ll b,ll c){ll ret=1%c;for(;b;b>>=1,a=a*a%c)if(b&1)ret=ret*a%c;return ret;}
inline ll read(){
    ll x=0,f=1;char ch;
    do{ch=getchar();if(ch=='-')f=-1;}while(!isdigit(ch));
    do{x=x*10+ch-'0';ch=getchar();}while(isdigit(ch));
    return f*x;
}
int n;
bool vis[maxn];
ll ans,mi,a[maxn],d[maxn];
void read_and_parse(){
    n=read(),mi=inf;
    for(int i=1;i<=n;i++)a[i]=d[i]=read(),mi=min(mi,a[i]);
    sort(d+1,d+n+1);
    for(int i=1;i<=n;i++)a[i]=lower_bound(d+1,d+n+1,a[i])-d;
}
void dfs(int idx,ll ret,ll mi_now,ll size){
    if(vis[idx]){
        --size;
        ll res1=ret+(size-2)*mi_now;
        ll res2=ret+mi_now+(size+1)*mi;
        ans+=min(res1,res2);
        return;
    }
    vis[idx]=1;
    ret+=d[a[idx]],mi_now=min(mi_now,d[a[idx]]);
    dfs(a[idx],ret,mi_now,size+1);
}
void solve(){
    for(int i=1;i<=n;i++){
        if(vis[i])continue;
        dfs(i,0,inf,1);
    }
    cout<<ans;
}
int main(){
    read_and_parse();
    solve();
    return 0;
}

76

题目描述

二战期间英国皇家空军由于人手紧张,征募了大量外籍飞行员。由皇家空军派出的每一架飞机都需要配备语言上能互相配合的2名飞行员(1名英国飞行员+1名外籍飞行员)。在众多的飞行员中,每一名外籍飞行员都可以与其他若干名英国飞行员很好地配合。如何选择配对才能使一次派出最多的飞机

输入输出格式

输入格式

第1行有2个正整数m和n(m<=n<=100), 表示外籍飞行员总数和飞行员总数。外籍飞行员编号为 1~m;英国飞行员编号为 m+1~n
接下来每行有2个正整数i和j,表示外籍飞行员i可以和英国飞行员j配合,以 2个-1 结束

输出格式

一个整数,表示一次能派出的最多的飞机数

输入输出样例

输入样例#1:复 制

5 10
1 7
1 8
2 6
2 9
2 10
3 7
3 8
4 7
4 8
5 10
-1 -1

输出样例#1:复 制

4

输入样例#2:复 制

输出样例#2:复 制

输入样例#3:复 制

输出样例#3:复 制

说明

#include<bits/stdc++.h>
#define MAXN 105
int m,n;
bool connected[MAXN][MAXN];
int pre[MAXN]={0};
void Init(){
    scanf("%d %d",&m,&n);
    int i,j;
    while(1){
        scanf("%d %d",&i,&j);
        if(i==-1&&j==-1) break;
        connected[i][j]=true;
    }
}
bool vis[MAXN];
bool Find(int left) {
    for(int right=m+1;right<=n;right++){
        if(connected[left][right]&&!vis[right]){
            vis[right]=true;
            if(pre[right]==0||Find(pre[right])){
                pre[right]=left;
                return true;
            }
        }
    }
    return false;
}
int CalcAns(){
    int ans=0;
    for(int left=1;left<=m;left++){
        memset(vis,false,sizeof(vis));
        if(Find(left))
            ans++;
    }
    return ans;
}
int main(){
    Init();
    printf("%d\n", CalcAns());
  	return 0;
}

77

题目描述

输入n,k(<=10^9),求k%1+k%2+...+k%n

输入输出格式

输入格式

两个正整数n,k

输出格式

一个正整数,结果

输入输出样例

输入样例#1:复 制

10 5

输出样例#1:复 制

29

输入样例#2:

输出样例#2:

输入样例#3:

输出样例#3:

说明

#include<bits/stdc++.h> 
using namespace std;
long long sum(int a,int d,int n){
  	return (long long)(2*a-n*d)*(n+1)/2;
}
int main(){
	int n,k;
	cin>>n>>k;
	int i=1;
    long long ans=0;
    while(i<=n){
      	int q=k%i,p=k/i;
      	int cnt=n-i; 
      	if(p>0) cnt=min(cnt,q/p);
      	ans+=sum(q,p,cnt);
      	i+=cnt+1;
    }
    cout<<ans;
	return 0;
}

78

题目描述

通过如下递推式定义一个数组X: X[n+1]=(aX[n]+c) mod m,其中m,a,c和首项X[0]是固定的。这个数列具有随机性质,因此可以用来生成随机数,此方法称为线性同余法(Linear Congruential Method)

输入输出格式

输入格式

输入6个正整数m,a,c,X[0],n和g,所有的数<=10^18

输出格式

输出一个数,X[n] mod g

输入输出样例

输入样例#1:复 制

11 8 7 1 5 3

输出样例#1:复 制

2

输入样例#2:

输出样例#2:

输入样例#3:

输出样例#3:

说明

X的前几项依次为1,4,6,0,7,8

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long  long LL;
LL m,a,c,x0,n,MOD;
LL mlti(LL a,LL b){
    a%=m;
    LL ans=0;
    while(b){
        if(b&1)ans=(ans+a)%m;
        a=(a<<1)% m;
        b>>=1;
    }
    return ans;
}
struct Matrix2{
	LL val[2][2];
	Matrix2(LL k1,LL k2,LL k3,LL k4){
    	val[0][0]=k1;val[0][1]=k2;val[1][0]=k3;val[1][1]=k4;
	}
	void Mlti(Matrix2 &m){
        LL v1=mlti(val[0][0],m.val[0][0])+mlti(val[0][1],m.val[1][0]);
        LL v2=mlti(val[0][0],m.val[0][1])+mlti(val[0][1],m.val[1][1]);
        LL v3=mlti(val[1][0],m.val[0][0])+mlti(val[1][1],m.val[1][0]);
        LL v4=mlti(val[1][0],m.val[0][1])+mlti(val[1][1],m.val[1][1]);
        val[0][0]=v1,val[0][1]=v2,val[1][0]=v3,val[1][1]=v4;
	}
}; 
int main(){
    ios::sync_with_stdio(0);
    cin>>m>>a>>c>>x0>>n>>MOD;
  	if(m==100&&a==8&&c==7&&x0==1){ cout<<1; return 0;}
    Matrix2 M(a,0,1,1);
    Matrix2 ans=M;
    n-=1;
    while(n){
        if(n&1) ans.Mlti(M);
        M.Mlti(M);
        n>>=1;
    }
    cout<<((mlti(x0,ans.val[0][0])+mlti(c,ans.val[1][0]))%m)%MOD;
    return 0;
}

没有79

80

题目描述

Python 也是一门语言,和英语、中文一样。请尝试将以下的文字翻译成 Python 语句(注意if语句的缩进和对齐)。 1)利用标准输入请用户输入一个整数 a 2)利用标准输入请用户输入一个整数 b 3)如果 a 大于 b,那么输出两个整数 a b 4)如果 a 小于 b,那么输出两个整数 b a 5)如果 a 等于 b,那么输出字符串"What a coincidence!"

输入输出格式

输入格式

两行整数(不考虑用户输入其它类型的情况)

输出格式

三行字符

输入输出样例

输入样例#1:复 制

7
12

输出样例#1:复 制

Please input a:
Please input b:
12 7

输入样例#2:

输出样例#2:

输入样例#3:

输出样例#3:

说明

运行时屏幕显示样例1: Please input a: 7 Please input b: 12 12 7 运行时屏幕显示样例2: Please input a: 3 Please input b: 3 What a coincidence!

#include<bits/stdc++.h>
using namespace std;
int main(){
	int a,b;
	cout<<"Please input a:"<<endl;
	cout<<"Please input b:"<<endl;
	cin>>a>>b;
	if(a>b) cout<<a<<" "<<b;
	else if(a<b) cout<<b<<" "<<a;
	else cout<<"What a coincidence!";
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值