目录
A
题意:给你4个不知道顺序的值,分别为(a+b)、(a+c)、(b+c)、(a+b+c)
你需要任意输出三个正整数 A B C
解: 既然A B C都为正整数,那么a+b+c一定是最大的,排序输出即可
/**
* Copyright(c)
* All rights reserved.
* Author : Mingzhe
* Description : sample
*/
#include <cstdio>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <cstdlib>
#include <set>
#include <map>
#include <list>
#include <stack>
#include <queue>
#include <string>
#include <cstring>
#include <sstream>
#include <memory.h>
#define MAXN 105
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
ll x[MAXN];
int main(){
for(int i=0;i<4;i++){
cin>>x[i];
}
sort(x,x+4);
cout<<x[3]-x[0]<<' '<<x[3]-x[1]<<' '<<x[3]-x[2]<<endl;
return 0;
}
B
题意:给你一个长为N的序列,可以对每一个元素进行一次操作
操作:1. +D 2. -D 3.啥也不做
问有没有一个数D 能通过这些操作,是序列所有元素相等,不存在输出-1
解:分情况讨论即可
/**
* Copyright(c)
* All rights reserved.
* Author : Mingzhe
* Description : sample
*/
#include <cstdio>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <cstdlib>
#include <set>
#include <map>
#include <list>
#include <stack>
#include <queue>
#include <string>
#include <cstring>
#include <sstream>
#include <memory.h>
#define MAXN 105
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
int x[MAXN];
int ans[MAXN];
int main(){
memset(x,0,sizeof(x));
int n,p;
int sum=0;
cin>>n;
for(int i=0;i<n;i++){
cin>>p;
if(!x[p])sum++;
x[p]++;
}
if(sum>3){
cout<<-1<<endl;
return 0;
}
if(sum==3){
int p=0;
for(int i=0;i<=100;i++){
if(x[i]){
ans[p++] = i;
}
}
int cal = ans[2]-ans[1];
if(cal!=ans[1]-ans[0]){
cout<<-1<<endl;
}
else{
cout<<cal<<endl;
}
}
else if(sum==2){
int p=0;
for(int i=0;i<=100;i++){
if(x[i]){
ans[p++] = i;
}
}
int k = ans[1]-ans[0];
if(k%2==0) k/=2;
cout<<k<<endl;
}
else{
cout<<0<<endl;
}
return 0;
}
C
题意: 有只猫去旅行,星期一、四、日 吃鱼,星期二、六 吃兔子,星期三、五 chinken
现给它N鱼 M兔子 Kchinken 它可以选择哪一天开始,问最多能走多久?
解: 简单贪心,7天为一周期,剩下的枚举从哪天开始比较好就行
/**
* Copyright(c)
* All rights reserved.
* Author : Mingzhe
* Description : sample
*/
#include <cstdio>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <cstdlib>
#include <set>
#include <map>
#include <list>
#include <stack>
#include <queue>
#include <string>
#include <cstring>
#include <sstream>
#include <memory.h>
#define MAXN 105
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
int main(){
ll a,b,c;
ll sum=0;
cin>>a>>b>>c;
ll p = min(min(a/3,b/2),c/2);
a -= p*3;
b -= p*2;
c -= p*2;
sum += 7*p;
int cal=0;
for(int i=0;i<7;i++){
int val=0;
int num1=a,num2=b,num3=c;
for(int j=0;j<7;j++){
int z=(i+j)%7;
if(z==0 || z==3 || z==6){
num1--;
}
else if(z==1 || z==5){
num2--;
}
else{
num3--;
}
if(num1<0 || num2<0 || num3<0)break;
val++;
}
cal = max(cal,val);
}
cout<<sum+cal<<endl;
return 0;
}
D
题意:有一个机器人有电池 A 后备隐藏能源 B,给一段长为N的路
路为1表示该段有阳光,使用电池通过有阳光的地段,可以使后备隐藏能源+1
问该机器人最长能走多远?
解:分情况讨论,重要的是在有阳光的地方,如果后备隐藏能源满了,就没有必要花费电池的能量了。
/**
* Copyright(c)
* All rights reserved.
* Author : Mingzhe
* Description : sample
*/
#include <cstdio>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <cstdlib>
#include <set>
#include <map>
#include <list>
#include <stack>
#include <queue>
#include <string>
#include <cstring>
#include <sstream>
#include <memory.h>
#define MAXN 200005
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
int x[MAXN];
int main(){
int n,m,k;
cin>>n>>m>>k;
for(int i=0;i<n;i++){
cin>>x[i];
}
int ans = 0;
int sum=k;
for(int i=0;i<n;i++){
if(x[i]){
if(sum==k || !m){
sum--;
}
else{
m--;
sum++;
if(sum>k){
sum = k;
}
}
}
else{
if(sum){
sum--;
}
else{
m--;
}
}
if(m<0 || sum<0) break;
ans++;
}
cout<<ans<<endl;
return 0;
}