前言
第一道题的第二个低保都没吃到手,第二道题也就吃了两个低保,太菜了。最后的测试点看起来不是思维就是暴力,都不想写了,算了,没资格就没资格吧,来年再战
A Pattern Matching
//只吃到一个低保,第二个点写了好久写崩了,不想改了
#include <iostream>
#include <string>
using namespace std;
int t,n;
string buf[55];
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int kase=0;
cin>>t;
while(t--){
cin>>n;
int sz=-1;
string str,cur;
for(int i=1;i<=n;i++){
cin>>str;
int now=str.size();
string res="";
for(int j=now-1;j>=0;j--){
res+=str[j];
}
buf[i]=res;
if(now>sz){
cur=res;
sz=now;
}
}
//cout<<cur<<endl;
int flag=0;
for(int i=1;i<=n;i++){
if(flag) break;
if(buf[i].size()<sz){
for(int j=buf[i].size()-1;j<sz;j++)
buf[i]+='*';
}
for(int k=0;k<sz;k++){
if(buf[i][k]!=cur[k] && buf[i][k]!='*' && cur[k]!='*'){
flag=1;
break;
}
}
}
cout<<"Case #"<<++kase<<": ";
if(flag) cout<<"*"<<endl;
else{
for(int i=sz-1;i>=0;i--)
if(cur[i]!='*') cout<<cur[i];
cout<<endl;
}
}
return 0;
}
B Pascal Walk
1.对于杨辉三角,首先当n较小时,第i行的第二个数为i-1,那么我们一直取一半的1,后面直接跳到第二列。对于奇数,加一除以二求得mid;偶数直接除以二,然后奇数是直接跳到当前行的第二列,偶数是跳到下一行的第二列
2.当n<=998时,上面的规律输出了499个数。因此对999和1000要特判,我们只在中间多跳一次即可,当输出499个数时得到的结果为996,想办法加上3或者加上4即可
//吃低保得永生
#include <iostream>
using namespace std;
int t,n,kase=0;
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>t;
while(t--){
cin>>n;
cout<<"Case #"<<++kase<<":"<<endl;
if(n==1){
cout<<"1 1"<<endl;
}else if(n>1 && n<=998){
if(n&1){
int mid=(n+1)/2;
for(int i=1;i<=mid;i++) cout<<i<<" 1"<<endl;
cout<<mid<<" 2"<<endl;
}else{
int mid=n/2;
for(int i=1;i<=mid;i++) cout<<i<<" 1"<<endl;
cout<<mid+1<<" 2"<<endl;
}
}else if(n==999){ //498*2 = 996 + 3=999 ---498+1+1=500´Î
cout<<"1 1"<<endl;
cout<<"2 1"<<endl;
cout<<"3 1"<<endl;
cout<<"4 2"<<endl;
for(int i=4;i<=498;i++) cout<<i<<" 1"<<endl;
cout<<499<<" 2"<<endl;
}else if(n==1000){ //498*2= 996 + 4=1000 ---498+1+1=500´Î
cout<<"1 1"<<endl;
cout<<"2 1"<<endl;
cout<<"3 1"<<endl;
cout<<"4 1"<<endl;
cout<<"5 2"<<endl;
for(int i=5;i<=498;i++) cout<<i<<" 1"<<endl;
cout<<499<<" 2"<<endl;
}
}
return 0;
}