水题系列
思路:
一题很奇怪的模拟题,在对应的两个人出牌,如果牌面上有两张一样的,就将两张牌以及中间的都收到出牌人手上,那我们就可以用map来判断有没有两张牌,用vector来保存场上的牌,string保存手牌,然后进行模拟就行。
代码:
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<map>
using namespace std;
int main()
{
int in=0;
string a,b;
map<char,int> m;
vector<char> dd;
cin>>a>>b;
while(a!=""&&b!="")
{
if(in==0)
{
char fuck=a[0];
dd.push_back(fuck);
a.erase(a.begin());
if(m[fuck]==0)
{
m[fuck]++;
}
else
{
a=a+fuck;dd.pop_back();
while(!dd.empty())
{
char ll=*dd.rbegin();
a=a+ll;dd.pop_back();m[ll]--;
if(ll==fuck)break;
}
in=!in;
}
}
else
{
char fuck=b[0];
dd.push_back(fuck);
b.erase(b.begin());
if(m[fuck]==0)
{
m[fuck]++;
}
else
{
b=b+fuck;dd.pop_back();
while(!dd.empty())
{
char ll=*dd.rbegin();
b=b+ll;dd.pop_back();m[ll]--;
if(ll==fuck)break;
}
in=!in;
}
}
in=!in;
}
if(a=="")cout<<b<<endl;
else cout<<a<<endl;
return 0;
}
思路:
又是熟悉的味道,找出九宫格横竖斜都相等的可能性,深搜暴力。
代码:
#include<iostream>
using namespace std;
int a[10],b[10],c[10],q=0,p[10];
bool look1()
{
int num1=a[1]+a[5]+a[9],num2=a[3]+a[5]+a[7];
if(num1!=num2)return false;
for(int i=1;i<=3;i++)
{
int sum1=0,sum2=0;
for(int j=1;j<=3;j++)
{
sum1+=a[i+(j-1)*3];
sum2+=a[j+(i-1)*3];
}
if(sum1!=sum2''sum1!=num1''sum1!=num1)return false;
}
return true;
}
bool look()
{
for(int i=1;i<=9;i++)
{
if(b[i]==0)return false;
}
return true;
}
void dfs(int node)
{
if(a[node]!=0)
{
dfs(node+1);
return;
}
if(look())
{
if(look1())
{
q++;
for(int i=1;i<=9;i++)p[i]=a[i];
}
}
for(int i=1;i<=9;i++)
{
if(b[i]==0)
{
b[i]++;a[node]=i;
dfs(node+1);
b[i]--;a[node]=0;
}
}
}
int main()
{
for(int i=1;i<=9;i++)
{
cin>>a[i];
b[a[i]]++;
}
dfs(1);
if(q==1)
{
for(int i=1;i<=9;i++)
{
cout<<p[i];
if(i%3==0)cout<<endl;
else cout<<" ";
}
}
else cout<<"Too Many"<<endl;
return 0;
}
思路:
进制转换,但是要注意这是没有0的26进制转换,如果遇到0时要特殊判断
代码:
#include<iostream>
#include<map>
#include<string>
using namespace std;
typedef long long ll;
int main()
{
ll a;
map<int,char> m;
string b="";
cin>>a;
for(int i=0;i<27;i++)
{
m[i]=i+'A';
}
if(a==0)cout<<"A"<<endl;
else
{
while(a)
{
int x=a%26;
if(x==0)
{
b=m[25]+b;
a=a/26-1;
}
else
{
b=m[x-1]+b;
a=a/26;
}
}
cout<<b<<endl;
}
return 0;
}