Dashboard - Codeforces Round #756 (Div. 3) - Codeforces
Problem - 1611A - Codeforces
题意:把给定的数字变成偶数,前提条件为找到长度l 然后进行从前往后l长度的翻转。
题解:分为4种情况:1.本身就是偶数2.本身不是偶数但是开头第一个数字为偶数3.本身不是偶数开头第一个数字也不是偶数但中间有偶数4.从头到尾每一个数字都为奇数。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll t;
cin>>t;
while(t--)
{
ll x;
cin>>x;
if((x%10)%2==0){cout<<0<<endl;continue;}
ll y=x;
bool a=0,b=0;
while(y>10)
{
y/=10;
if((y%10)%2==0)a=1;
if(y<10)if(y%2==0)b=1;
}
if(b==1)cout<<1<<endl;
else if(a==1)cout<<2<<endl;
else cout<<-1<<endl;
}
return 0;
}
Problem - 1611B - Codeforces
题意:给定a群与b群,从a与b中总共找4人组成一队,需要a与b都加入此队才成立,求最大队伍数量。
题解:分为四种情况,1.当a与b加起来都不大于4人 2.a与b中最大的是最小的那群的3倍
3.a等于b 4.其他情况
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll t;
cin>>t;
while(t--)
{
ll a,b,c,d,flag=0,sum=0;
cin>>a>>b;
c=max(a,b);
d=min(a,b);
if(c+d<4)cout<<0<<endl;
else if(c>=3*d)cout<<d<<endl;
else if(c==d)cout<<d/2<<endl;
else cout<<(c+d)/4<<endl;
}
return 0;
}
Problem - 1611C - Codeforces
题意:根据改变的步骤求出原数组
题解:取出a中的最大值最先放到p数组的最右端中,然后再把a中的元素依次的压入p(第一个元素放到最大值的左边,依次类推
#include<bits/stdc++.h>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
int n, spot = 0,max=0;
cin >> n;
int p[200000], ans[200000];
for (int i = 0; i < n; i++) {
cin >> p[i];
if (p[i] > max) {
max = p[i];
}
}
if (p[n - 1] > p[0] && p[n - 1] == max) spot = n - 1;
else if (p[n - 1] < p[0] && p[0] == max) spot = 0;
else if (n == 1) { cout << n<< endl; continue; }
else {
cout << "-1" << endl;
continue;
}
if (spot ==n - 1) {
ans[n - 1] = max;
for (int i = 0; i <n - 1; i++) {
ans[n - 2 - i] = p[i];
}
}
if (spot ==0) {
ans[n-1] = max;
for (int i = 0; i < n - 1; i++) {
ans[n-2-i] = p[i+1];
}
}
for (int i = 0; i < n; i++) {
cout << ans[i] << " ";
}
cout << endl;
}
}
|