目錄
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;
}