自从上个月得了麦粒肿,又遇上入D的一系列麻烦事儿,心态爆炸,状态开始摆烂,摆完蓝桥杯,摆完昆明站,终于在这几天感觉状态逐渐好转。。。
冲冲冲!
???????????Problem - A - Codeforces
题目大意:不能连续走一样的方位,求从(1,1)点到(n,m)点的距离。
直接拆分成从(1,1)走到(min(n,m),min(n,m))的距离,再加上额外的步骤就行了。很容易发现偶数得拐弯走4步,奇数只要1步,拼凑即可。
input
6
1 1
2 1
1 3
4 2
4 6
10 5
output
0
1
-1
6
10
17
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstring>
#include<string>
#include<queue>
using namespace std;
int main()
{
cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
int t;
cin>>t;
while(t--)
{
int a,b;
cin>>a>>b;
if((a==1&&b>2)||(a>2&&b==1)) cout<<"-1"<<endl;
else
{
if(a<b) swap(a,b);
int sum=(b-1)*2;
sum+=(a-b)/2*4+(a-b)%2*1;
cout<<sum<<endl;
}
}
return 0;
}
Problem - B - Codeforces
题目大意:n个人,m个凳子,这n个人中每个人都想旁边至少隔了a[i]个人。
sort reverse一下,谁要的多就放谁先坐。
input
6
3 2
1 1 1
2 4
1 1
2 5
2 1
3 8
1 2 1
4 12
1 2 1 3
4 19
1 2 1 3
output
NO
YES
NO
YES
NO
YES
永远第一发wa在没开long long
吃一一一一一一一一一一一一一一一一一一一一······堑长一智
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstring>
#include<string>
#include<queue>
using namespace std;
typedef long long LL;
LL a[200200];
int main()
{
cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
int t;
cin>>t;
while(t--)
{
LL n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
reverse(a+1,a+1+n);
LL sum=a[1]+1;
for(int i=1;i<n;i++)
sum+=a[i]+1;
//cout<<sum<<endl;
if(m>=sum) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
Problem - C - Codeforces
题目大意:a数组给定,b数组初始化全为0。操作选其一:要么把a[i]搬到b[i]的位置上,要么把a[i]从b[i]的位置上减去。目的是把b变成严格上升序列,求最小步数。
无论怎么搞都只能有1个0,白给的当然要。那么就是要确定0的位置在哪里?
都跑一遍不就行了。
?input
5
1 2 3 4 5
output
4
input
7
1 2 1 2 1 2 1
output
10
input
8
1 8 2 7 3 6 4 5
output
16
长知识了:
0x3f3f3f3f还是在int的范围内,如果遇上long long,开1e18才能拿下
(wa了四五发留下的惨痛教训,还好debug成功了,不然彻夜无眠应该是会)?
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstring>
#include<string>
#include<queue>
using namespace std;
typedef long long LL;
LL a[200200];
int main()
{
cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
LL n;
cin>>n;
for(LL i=1;i<=n;i++)
cin>>a[i];
LL minn=1e18;
LL flag=0;
while(flag<=n)
{
LL sum=0,last=0;
for(LL i=flag+1;i<=n;i++)
{
if(a[i]>last) sum++,last=a[i];
else
{
LL num=last/a[i]+1;
sum+=num,last=num*a[i];
}
}
last=0;
for(LL i=flag-1;i>=1;i--)
{
if(a[i]>last) sum++,last=a[i];
else
{
LL num=last/a[i]+1;
sum+=num,last=num*a[i];
}
}
minn=min(sum,minn);
flag++;
}
cout<<minn<<endl;
return 0;
}
加油!
|