目录
A题:A. Optimal Path
思路:
AC代码:
B题:B. Palindromic Numbers
思路:
AC代码:
C题:C. Helping the Nature
题意:
思路:
AC代码:
A题:A. Optimal Path
求最短路径长度
思路:
一道水题,直接上代码
AC代码:
#include <iostream>
using namespace std;
typedef long long ll;
int main(){
ll t,a,b,ans;
cin>>t;
while(t--){
cin>>a>>b;
ans=(1+b-1)*(b-1)/2+(b+a*b)*a/2;
cout<<ans<<endl;
}
return 0;
}
B题:B. Palindromic Numbers
给一个长数字a,求出另一个长度相等的数字b,使a+b的结果为一个回文字符串。
思路:
如果给出的数字第一位不为9,我们就让相加后的串为长度为的全9串。
如果第一位为9,就令相加后的串为长度为的全1串.然后做个高精度减法即可。
高精度减法用的ACwing的模板,注意套模板之前要用reverse函数翻转一下。
AC代码:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<int> sub(vector<int>&A,vector<int>&B){
vector<int> c;
for(int i=0,t=0;i<A.size();i++){
t=A[i]-t;
if(i<B.size()) t-=B[i];
c.push_back((t+10)%10);
if(t<0) t=1;
else t=0;
}
while(c.size()>1&&c.back()==0) c.pop_back();
return c;
}
vector<int> a,b,c;
vector<int>::iterator it;
string str;
int main(){
int t,n,temp;
scanf("%d",&t);
while(t--){
a.clear();
b.clear();
c.clear();
cin>>n;
cin>>str;
for(int i=0;i<n;i++){
temp=str[i]-'0';
a.push_back(temp);
}
if(str[0]=='9') {
for(int i=0;i<=n;i++){
b.push_back(1);
}
}
else{
for(int i=0;i<n;i++){
b.push_back(9);
}
}
reverse(a.begin(),a.end());
c=sub(b,a);
reverse(c.begin(),c.end());
for(int i=0;i<n;i++){
printf("%d",c[i]);
}
printf("\n");
}
return 0;
}
C题:C. Helping the Nature
题意:
?
思路:
经典差分题,只要想清楚了就很简单;
思路如下所示:
?
AC代码:
#include <bits/stdc++.h>
using namespace std;
int arr[200005];
int brr[200005];
typedef long long ll;
int main(){
ll t,n;
scanf("%lld",&t);
while(t--){
memset(arr,0,sizeof(arr));
memset(brr,0,sizeof(brr));
scanf("%lld",&n);
for(int i=0;i<n;i++){
scanf("%lld",&arr[i]);
}
for(int i=1;i<n;i++){
brr[i]=arr[i]-arr[i-1];
}
brr[0]=arr[0];
ll ans=0,star=arr[0];
for(int i=1;i<n;i++){
if(brr[i]<0) star=star+brr[i],ans=ans-brr[i];
else ans=ans+brr[i];
}
if(star<=0) cout<<ans-star<<endl;
else cout<<ans+star<<endl;
}
}
D题:D. River Locks
题意:
思路:
AC代码:
待补充ing....
|