N.
因为输入只有两个字母,结果最多只有两位数,可以直接写答案
void solve(){
char x,y;cin>>x>>y;
int xx=x-'A',yy=y-'A';
int ans=xx+yy;
if(ans<26)cout<<(char)('A'+ans);
else {
ans-=26;
cout<<'B'<<(char)('A'+ans);
}
}
再写了一个可以处理更多字母的:
相当于10进制和26进制的转换,把输出转成字母就好了
int to10(string s){
int ans=0;
for(int i=s.size()-1;i>=0;i--){
ans*=26;
ans+=(s[i]-'A');
}
return ans;
}
string toc(int x){
stack<char>st;
if(x==0){
return "A";
}
while(x) {
st.push((char) ('A' + (x % 26)));
x/=26;
}
string ans="";
while(st.size()){
ans.push_back(st.top());st.pop();
}
return ans;
}
void solve()
{
string a,b;cin>>a>>b;
int aa=to10(a),bb=to10(b);
int c=aa+bb;
cout<<toc(c);
}
C.
因为结果要求排列升序或降序,操作是反转
但是如果不是连续的序列(1,2,3是连续的,1,3,4不是因为1和3相差2)即使反转也没有用
所以遍历,如果不是连续的(后一个数比前一个数大1或小1),就一定要花费1次操作
int a[N];
void solve(){
int n;cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
int ans=0;
for(int i=2;i<=n;i++){
if(a[i]==a[i-1]-1||a[i]==a[i-1]+1)continue;
else ans++;
}
cout<<ans;
}
K.
自己写的是组合数
ll sq[25];
ll n;
ll C(ll x){
if(x==n)return 1;
ll tmp=n-x;
x=min(tmp,x);
return (sq[n]/sq[n-x]/sq[x]);
}
void solve(){
sq[0]=1;
for(ll i=1;i<=20;i++)sq[i]=sq[i-1]*i;
cin>>n;
ll ans=0;
for(ll i=1;i<=n;i++){
ans+=C(i);
}
cout<<ans;
}
谁成想,pow(2,a)-1一个式子就够了,有被气炸
每道题都有选或不选两种情况就是2^a,减去全都不选这一不合法的情况即为答案
void solve(){
int a;cin>>a;
ll ans=pow(2,a)-1;
cout<<ans<<endl;
}
标签:return,int,sq,iwtgm,void,ans,ll
From: https://www.cnblogs.com/wwww-/p/17796414.html