OwO
A. 不断减损的时间
既然将偶数除以2的操作可以做无限次,要求所有元素和最小,那必然是将正偶数的2因子除尽,负偶数和奇数不变.
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define lowbit(x) ((x)&-(x))
const int N=1e5+5;
int a[N];
<int> s;
priority_queueint main() {
::sync_with_stdio(false);
iosint n;
>>n;
cin=0;
ll sumfor(int i=1;i<=n;i++)
{
>>a[i];
cinif(a[i]%2!=0)
+=a[i];
sumelse
{
if(a[i]>0)
{
while(a[i]%2==0)
[i]/=2;
a+=a[i];
sum}
else
+=a[i];
sum}
}
<<sum<<'\n';
coutreturn 0;
}
B. 勉强拼凑的记忆
一开始没看样例,以为k是固定的(悲)
首先k不是固定的,题目化为找出不超过n块砖拼成的最大正方形边长(因为可以将大砖分成小砖,位置不变).
然后如果要使正方形边长尽可能大,那么就要使正方形面积尽可能大,就要让k尽可能大.
将k取到最大,即
所以答案应该是
即
另外需要特判一下
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define lowbit(x) ((x)&-(x))
(ll n,ll x)
ll ceil{
if(n%x==0)
return n/x;
else
return n/x+1;
}
int main() {
::sync_with_stdio(false);
iosint T;
>>T;
cinwhile(T--)
{
;
ll n>>n;
cinif(n==2)
<<-1<<'\n';
coutelse
<<ceil(n,2)+n/2/3<<'\n';
cout}
return 0;
}
C. 忽远忽近的距离
先看n比较好的情况.
发现如果
如果
若
若
若
注意特判!
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define lowbit(x) ((x)&-(x))
const int N=1e5+5;
int a[N];
int main() {
::sync_with_stdio(false);
iosint n;
>>n;
cinif(n<=3||n==7)
<<-1<<'\n';
coutelse
{
for(int i=1;i<=n;i++)
[i]=i;
aif(n%4==0)
{
for(int i=1;i<=n-3;i+=4)
{
(a[i],a[i+2]);
swap(a[i+1],a[i+3]);
swap}
for(int i=1;i<=n;i++)
<<a[i]<<' ';
cout<<'\n';
cout}
else if(n%4==2)
{
int n1=n/4*4-4;
for(int i=1;i<=n1-3;i+=4)
{
(a[i],a[i+2]);
swap(a[i+1],a[i+3]);
swap}
for(int i=1;i<=n1;i++)
<<a[i]<<' ';
cout<<n1+4<<' '<<n1+5<<' '<<n1+1<<' '<<n1+6<<' '<<n1+2<<' '<<n1+3<<'\n';
cout}
else if(n%4==1)
{
int n1=n/4*4-4;
for(int i=1;i<=n1-3;i+=4)
{
(a[i],a[i+2]);
swap(a[i+1],a[i+3]);
swap}
for(int i=1;i<=n1;i++)
<<a[i]<<' ';
cout<<n1+4<<' '<<n1+5<<' '<<n1+1<<' '<<n1+2<<' '<<n1+3<<'\n';
cout}
else if(n%4==3)
{
int n1=n/4*4-4-4;
for(int i=1;i<=n1-3;i+=4)
{
(a[i],a[i+2]);
swap(a[i+1],a[i+3]);
swap}
int n2=n1+6;
for(int i=1;i<=n1;i++)
<<a[i]<<' ';
cout<<n1+4<<' '<<n1+5<<' '<<n1+1<<' '<<n1+6<<' '<<n1+2<<' '<<n1+3<<' ';
cout<<n2+4<<' '<<n2+5<<' '<<n2+1<<' '<<n2+2<<' '<<n2+3<<'\n';
cout}
}
return 0;
}
D. 宿命之间的对决
初看上去不太好做,试试
发现在
尝试证明,用第二类数学归纳法:
设对于
综上,由归纳原理,对于
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define lowbit(x) ((x)&-(x))
int main() {
::sync_with_stdio(false);
ios;
ll n>>n;
cinif(n%2==0)
<<"kou"<<'\n';
coutelse
<<"yukari"<<'\n';
coutreturn 0;
}
E. 公平守望的灯塔
可以直接找出直角顶点,看一下是不是整点就行.
取
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define lowbit(x) ((x)&-(x))
int main() {
::sync_with_stdio(false);
ios,y1,x2,y2;
ll x1>>x1>>y1>>x2>>y2;
cin=x1+x2-y2+y1,y=y1+y2+x2-x1;
ll xif(x%2!=0||y%2!=0)
<<"No Answer!"<<'\n';
coutelse
<<x/2<<' '<<y/2<<'\n';
coutreturn 0;
}
F. 迎接终结的寂灭
一开始还用python去搞,发现python也算不了带sqrt
和↑↑
的表达式,突然发现似乎这题就是让输出42(悲).
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define lowbit(x) ((x)&-(x))
int main() {
::sync_with_stdio(false);
ios<<42<<'\n';
coutreturn 0;
}