1.大模拟。(乒乓球)
一道大模拟,就输入有点意思。。
while(~scanf("%c",&c) && c!='E')str[++cnt]=c;
针对以特定字符结尾的字符串。。。
上代码。。
#include<bits/stdc++.h>
using namespace std;
string str;
int cnt=0,saichang,W,L,js=1;
char c;
int main(){
while(~scanf("%c",&c) && c!='E')str[++cnt]=c;
while(js<=cnt){
L=W=0;
while(1){
char o=str[js++];
if(o=='W')W++;
else if(o=='L')L++;
else ;
if(js>cnt || ((L>=11)&&(L-W>=2)) || ((W>=11)&&(W-L>=2)))break;
}
cout<<W<<":"<<L<<endl;
}
js=0;
cout<<endl;
while(js<=cnt){
L=W=0;
while(1){
char o=str[js++];
if(o=='W')W++;
else if(o=='L')L++;
else ;
if(js>cnt || ((L>=21)&&(L-W>=2)) || ((W>=21)&&(W-L>=2)))break;
}
cout<<W<<":"<<L<<endl;
}
return 0;
}
2. 高精加。(第三题有函数可以直接用)
3.高精加乘除。
总之一句话,就把你当小学生,小学生该怎么算电脑就该怎么算。。。。
#include<bits/stdc++.h>
using namespace std;
int o[100000],js,len;
void G_C(string a,string b){//高精的乘法
int lena=a.length();
int lenb=b.length();
len=lena+lenb;
for(int i=1;i<=lena;i++){//取出a[lena-i]
js=0;
for(int j=1;j<=lenb;j++){//取出b[lenb-i]
int A=a[lena-i]-'0';
int B=b[lenb-j]-'0';
o[i+j-1]+=A*B+js;
js=o[i+j-1]/10;
o[i+j-1]%=10;
}
o[i+lenb]+=js;
}
len-=(o[lena+lenb]==0?1:0);
//for(int i=len;i>=1;i--)cout<<o[i];
//cout<<endl;
}
void jia(string s1){//高精加法。。
int Len=s1.length();
js=0;
for(int i=1;i<=len;i++){
if(Len-i>=0)o[i]+=(s1[Len-i]-'0')+js;
else o[i]+=js;
js=o[i]/10;
o[i]%=10;
}
if(js==1)o[++len]=js;
//for(int i=len;i>=1;i--)cout<<o[i];
//cout<<endl;
}
void chu(){//高精除法
for(int i=len;i>=1;i--){
o[i-1]+=(o[i]%2)*10;
o[i]/=2;
}
len-=(o[len]?0:1);
for(int i=len;i>=1;i--)cout<<o[i];
}
int main(){
string s1,s2;
cin>>s1;
G_C(s1,s1);
//cout<<s1<<endl;
jia(s1);
chu();
return 0;
}
4.洛谷的高精度+dp
思路:高精度+区间dp+记忆化;
代码:(未开o2)
#include<bits/stdc++.h>
using namespace std;
int n,m;
char buff[81];
string ans="0",ANS="0",mapp[81][81],dp[81][81];
string G_J(string a,string b){
int lena=a.length();
int lenb=b.length();
if(lena<lenb){
string c=a;
a=b;
b=c;
swap(lena,lenb);
}
int js=0,A,B;
int cnt=0;
for(int i=1;i<=lena;i++){
A=a[lena-i]-'0';
B=b[lenb-i]-'0';
if(lenb-i>=0)A+=B+js;
else A+=js;
js=A/10;
A%=10;
a[lena-i]='0'+A;
}
if(js)return '1'+a;
else return a;
}
string G_C2(string a){
int lena=a.length();
int js=0,A;
for(int i=1;i<=lena;i++){
A=a[lena-i]-'0';
A=A*2+js;
js=A/10;
A%=10;
a[lena-i]='0'+A;
}
if(js)return '1'+a;
else return a;
}
bool bijiao(string a,string b){
int lena=a.length();
int lenb=b.length();
if(lena>lenb)return 1;
else if(lena<lenb)return 0;
else{
for(int i=0;i<lena;i++){
if(a[i]<b[i])return 0;
if(a[i]>b[i])return 1;
}
}
return 0;
}
string jiyihua[81][81][81];
int main(){
cin>>n>>m;
//for(int i=0;i<=100;i++)buff[i]='0';
//cout<<buff<<endl;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>mapp[i][j];jiyihua[i][j][1]=G_C2(mapp[i][j]);
for(int k=2;k<=m;k++){
jiyihua[i][j][k]=G_C2(jiyihua[i][j][k-1]);
}
}
int z=1,y=m;
for(int j=1;j<=m;j++)for(int k=j;k<=m;k++)dp[j][k]=buff;
ans=buff;
for(int j=m;j>=1;j--){
for(int k=1;k+j-1<=m;k++){
if(k!=1){
string AS=G_J(dp[k-1][k+j-1],jiyihua[i][k-1][m-j]);
dp[k][k+j-1]=(bijiao(dp[k][k+j-1],AS)?dp[k][k+j-1]:AS);
}
if(k+j-1!=m){
string AS=G_J(dp[k][k+j],jiyihua[i][k+j][m-j]);
dp[k][k+j-1]=(bijiao(dp[k][k+j-1],AS)?dp[k][k+j-1]:AS);
}
if(j==1){
string AS=G_J(dp[k][k],jiyihua[i][k][m]);
ans=(bijiao(ans,AS)?ans:AS);
}
//cout<<dp[j][j+k-1]<<" ";
}
//cout<<endl;
}
ANS=G_J(ans,ANS);
}
cout<<ANS;
return 0;
}