题目链接
输入样例:
3 4
yny
nyy
nyn
yyn
输出样例:
3
5
6
2
答案:
法一:
二进制。y=0 ,n=1 将二进制转换成十进制之后+1输出
#include <iostream>
#include<bits/stdc++.h>
#define ll long long
#define PII pair<int,int>
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a))
const int N = 1e5 + 10;
using namespace std;
int dp[N];
int main(){
int n,m;
cin>>n>>m;
while(m--){
string s;
cin>>s;
for(int i=0;i<(int)s.size();i++){
if(s[i]=='y') dp[i]=0;
else dp[i]=1;
}
int tot=n-1;
ll sum=0;
for(int i=0;i<n;i++){
sum+=dp[i]*pow(2,tot);
tot--;
}
cout<<sum+1<<endl;
}
return 0;
}
法二:
模拟位置
#include <iostream>
#include<bits/stdc++.h>
#define ll long long
#define INF 0x3f3f3f3f
#define pb push_back
const int N = 1e5 + 10;
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
while(m--){
string s;
cin>>s;
ll pos=1;
ll len=s.size();
for(int i=0;i<len;i++){
if(s[i]=='y'){
pos=pos*2-1;
}
else{
pos=pos*2;
}
}
cout<<pos<<endl;
}
return 0;
}