1、手機號碼
題目鏈接
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<string>
#include<string.h>
using namespace std;
typedef long long ll;
string s1[1100],s2[1100];
ll book[1100];
ll ans=0,n,m;
bool cmp(string ss1,string ss2){
return ss1<ss2;
}
ll sum(ll n){
ll tmp=1;
for(ll i=0;i<n;i++){
tmp=tmp*10;
}
return tmp;
}
bool judge(string s1,string s2){
int len1=s1.length();
int len2=s2.length();
if(len1>len2) return false;
for(int i=0;i<len1;i++){
if(s1[i]!=s2[i]){return false;}
}
return true;
}
int main(){
std::ios::sync_with_stdio(false);
memset(book,0,sizeof(book));
cin>>n>>m;
ans=sum(n);
for(int i=0;i<m;i++){
cin>>s1[i];
s2[i]=s1[i];
}
sort(s1,s1+m,cmp);
for(int i=0;i<m;i++){
for(int j=i+1;j<m;j++){
if(judge(s1[i],s1[j])) { book[j]=1;} //前綴
}
}
for(int i=0;i<m;i++){
if(book[i]==0){
// cout<<i<<" "<<sum(n-s1[i].length())<<endl;
ans=ans-sum(n-s1[i].length());
}
}
cout<<ans<<endl;
return 0;
}
2、字符串的旋轉和追加
題目鏈接
分析:倒過來思考會簡單很多,不要想着怎樣從A到B,想着從B向A推,最後判斷兩者是否相等會簡單很多。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
string s1,s2;
//末尾是A
void add1(string &s2){
int len=s2.length()-1;
string s;
for(int i=0;i<len;i++){
s+=s2[i];
}
s2=s;
}
//末尾是B
void add2(string &s2){
int len=s2.length()-1;
string s;
for(int i=len-1;i>=0;i--){
s+=s2[i];
}
s2=s;
}
int main(){
std::ios::sync_with_stdio(false);
cin>>s1>>s2;
int len1=s1.length();
int len2=s2.length();
if(len1>len2){cout<<"Impossible"<<endl;}
else{
int cnt=len2;
while(cnt!=len1){
if(s2[cnt-1]=='A'){add1(s2);}
else{add2(s2);}
cnt--;
}
//cout<<s1<<" "<<s2<<endl;
if(s2==s1){cout<<"Possible"<<endl;}
else {cout<<"Impossible"<<endl;}
}
return 0;
}
3、判斷是不是正方形
思路:算出六條邊,倘若四條邊相等,另外兩條邊相同,那麼就是正方形。
題目
#include<iostream>
#include<algorithm>
using namespace std;
int x[1100],y[1100];
int solve(int x,int y,int xx,int yy){
return (xx-x)*(xx-x)+(yy-y)*(yy-y);
}
int main(){
std::ios::sync_with_stdio(false);
for(int i=0;i<4;i++){cin>>x[i];}
for(int i=0;i<4;i++){cin>>y[i];}
int ans[2100];
for(int i=0;i<4;i++){
if(i<=2){
ans[i]=solve(x[i],y[i],x[i+1],y[i+1]);
}
else{
ans[i]=solve(x[3],y[3],x[0],y[0]);
}
}
ans[4]=solve(x[0],y[0],x[2],y[2]);
ans[5]=solve(x[1],y[1],x[3],y[3]);
sort(ans,ans+6);
if(ans[0]==ans[1]&&ans[1]==ans[2]&&ans[2]==ans[3]&&ans[4]==ans[5]){
cout<<"It's a square"<<endl;
}
else{
cout<<"Not a square"<<endl;
}
return 0;
}
4、均分糖果
模擬
題目鏈接
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[11000];
int n;
int main()
{
std::ios::sync_with_stdio(false);
while(cin>>n){
int sum=0;
memset(a,0,sizeof(a));
for(int i=0;i<n;i++) {cin>>a[i];sum+=a[i];}
int ave=sum/n;
int cnt=0;
for(int i=0;i<n;i++){
if(a[i]!=ave){
cnt++;
a[i+1]+=(a[i]-ave);
}
}
cout<<cnt<<endl;
}
return 0;
}