A、Digit Game
思维题,写的有点麻烦,具体看代码。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
int t;
cin >> t;
while(t--){
int n;
string a;
cin >> n >> a;
if(n==1){
int temp = a[0] - '0';
if(temp%2==0)
cout << 2 <<endl;
else
cout << 1 <<endl;
}else{
if(n%2==0){
bool flag=0;
for(int i=1;i<n;i+=2){
int tt = a[i]-'0';
if(tt%2==0)
{
cout << 2 <<endl;
flag = 1;
break;
}
}
if(!flag)
cout << 1 <<endl;
}else{
bool flag = 0;
for(int i=0;i<n;i+=2){
int tt = a[i]-'0';
if(tt%2==1)
{
cout << 1 <<endl;
flag = 1;
break;
}
}
if(!flag)
cout << 2 <<endl;
}
}
}
return 0;
}
B、Stairs
题意: 楼梯的阶数不限,但如果对于 n 阶楼梯,它的第 i 列应该是由 i 个楼梯由单元格组成的n个不相交的正方形覆盖,则称为nice楼梯。 现在给你 x个方块,问你能制造多少个不同的楼梯。
思路:参考博客
构造+寻找规律,很难想到……
while(t--)
{
cin>>x;
int cnt=0;
ll temp;
for(ll i=1;;)
{
temp = (i+1)*i/2;//多少块木块
if(x<temp) break;
x -= temp;
cnt++;
i=i*2+1;//多少个整题木块
}
cout<<cnt<<endl;
}
D1、Sage’s Birthday (easy version)
水题
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll a[100010];
ll b[100010];
int main(){
int n;
cin >> n;
for(int i=0;i<n;i++){
cin >> a[i];
}
sort(a,a+n);
int k=0;
for(int i=0;i<n/2;i++){
b[k++] = a[n/2+i];
b[k++] = a[i];
}
if(n%2==1)
b[k++] = a[n-1];
int num = 0;
for(int i=1;i<n-1;i++)
{
if(b[i]<b[i-1]&&b[i]<b[i+1])
num++;
}
cout << num <<endl;
for(int i=0;i<n;i++)
cout << b[i] << " ";
cout <<endl;
return 0;
}