團隊設計天梯賽L1坑點題目總結
阿新 • • 發佈:2020-11-22
前言
刷不動題了,就把這兩天刷的有坑點的題目總結下吧
L1-006 連續因子
坑點:要考慮有素數存在的情況
view code
#include <bits/stdc++.h> using namespace std; int main() { int n;cin>>n; int mlen=0; int start=0; for(int i=2;i<=sqrt(n);i++){ if(n%i!=0) continue; int temp=n; int x=i; int len=0; while(temp%x==0){ temp/=x; x++; len++; } if(mlen<len){ mlen=len; start=i; } } if(!mlen){ printf("%d\n%d",1,n); return 0; } cout<<mlen<<endl; for(int i=0;i<mlen;i++){ if(i!=0)cout<<"*"; cout<<start++; } return 0; }
L1-019 誰先倒
甲乙同時贏或者同時輸不喝酒
view code
#include <bits/stdc++.h> using namespace std; string s; int main() { int maxa,maxb; cin>>maxa>>maxb; int n; cin>>n; int numa=0,numb=0; for(int i=0;i<n;i++){ int a1,a2,b1,b2; cin>>a1>>a2>>b1>>b2; if(a1+b1==a2&&a2!=b2) numa++; if(a1+b1==b2&&a2!=b2) numb++; if(numa>maxa){ cout<<"A\n"; cout<<numb; break; } if(numb>maxb){ cout<<"B\n"; cout<<numa; break; } } return 0; }
L1-033 出生年
坑點:年齡不能太大,否則就會有個測試點不過
view code
#include <bits/stdc++.h> using namespace std; int main() { int y,n; cin>>y>>n; set<int> s; for(int i=y;i<=y+150;i++){ //就是這裡,不能i<3000,小於個一百多就行了 if(i<1000)s.insert(0); int x=i; while(x>0){ s.insert(x%10); x/=10; } if(s.size()==n){ printf("%d %04d",i-y,i);break; } s.clear(); } return 0; }
L1-039 古風排版
這題沒什麼坑點,不過挺有意思的,記錄一下
view code
#include <bits/stdc++.h>
using namespace std;
char a[105][105];
int main()
{
int n; cin>>n; getchar();
string s;
getline(cin,s);
int len=s.size();
int m=len/n;
if(len%n!=0) m++;
int tot=0;
for(int i=m-1;i>=0;i--){
for(int j=0;j<n;j++){
if(tot<len){
a[j][i]=s[tot++];
}
else a[j][i]=' ';
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++){
cout<<a[i][j];
}
cout<<endl;
}
return 0;
}
L1-043 閱覽室
坑點:第一天借的書如果當天沒有還,在第二天或者以後再還是按一天的時間來算。真坑,題目設計有問題。
view code
#include <bits/stdc++.h>
using namespace std;
int s[1005],vis[1005];
int ans1[1005],ans2[1005];
int main()
{
int n;
cin>>n;
int cnt=0;
double sum=0;
int person=0;
while(cnt<n){
char c; int x,hh,mm;
scanf("%d %c %d:%d",&x,&c,&hh,&mm);
if(x==0){
ans1[cnt]=person;
if(person!=0)
ans2[cnt]=sum/person+0.5;
person=0; sum=0;
cout<<ans1[cnt]<<" "<<ans2[cnt]<<endl;
cnt++;
continue;
}
if(c=='S'){ s[x]=hh*60+mm;vis[x]=1;}
else if(c=='E'){
if(vis[x]){
sum+=hh*60+mm-s[x];
person++;
vis[x]=0; //這裡得手動置零,因為有可能出現第一天借的書沒有還,到了第二天,第三天才還,
//很坑的是,即使是到了第二天第三天去還,閱讀時間還是按一天的來算。
}
}
}
return 0;
}
L1-046 整除光棍
記錄一下,這種模擬除法的方法還是第一次見
view code
#include <bits/stdc++.h>
using namespace std;
int main()
{
int x;cin>>x;
int s=1;
int n=0;
while(x>s){
s=s*10+1;
n++;
}
while(1){
cout<<s/x;
if(s%x==0){ n++; break;}
s%=x;
s=s*10+1;
n++;
}
cout<<" "<<n;
return 0;
}
L1-048 矩陣A乘以B
線線代?
view code
#include <bits/stdc++.h>
using namespace std;
int n,m,n1,n2,m1,m2;
int a[105][105],b[105][105];
int main()
{
cin>>n1>>m1;
for(int i=0;i<n1;i++)
for(int j=0;j<m1;j++)
cin>>a[i][j];
cin>>n2>>m2;
for(int i=0;i<n2;i++)
for(int j=0;j<m2;j++)
cin>>b[i][j];
if(m1!=n2){ printf("Error: %d != %d",m1,n2); return 0;}
cout<<n1<<" "<<m2<<endl;
for(int n=0;n<n1;n++){
for(int m=0;m<m2;m++){
int x=0;
for(int i=0;i<m1;i++){
x+=a[n][i]*b[i][m];
}
if(m==m2-1)cout<<x;
else
cout<<x<<" ";
}
if(n!=n1-1)
cout<<endl;
}
return 0;
}
L1-049 天梯賽座位分配
開一個vector二維陣列,模擬向裡面填數
view code
#include <bits/stdc++.h>
using namespace std;
vector <int> a[105];
int b[105];
int vis[105];
int n;
int main()
{
cin>>n;
int tot=1;
for(int i=1;i<=n;i++) cin>>b[i];
int m=n;
while(m>0){
for(int i=1;i<=n;i++){
if(vis[i]) continue;
if(m==1){a[i].push_back(tot);tot+=2;}
else{
a[i].push_back(tot++);
}
if(a[i].size()==b[i]*10) {vis[i]=1; m--;}
}
}
for(int j=1;j<=n;j++){
int cnt=0;
cout<<"#"<<j<<endl;
for(int i:a[j]){
cnt++;
if(cnt==10)
cout<<i<<"\n",cnt=0;
else
cout<<i<<" ";
}
}
return 0;
}
L1-050 倒數第N個字串
我怎麼就想不到呢,長度為n的串,每一位是先b%n,b/=n;
view code
#include <bits/stdc++.h>
using namespace std;
void dfs(int a,int b){
if(a>1) dfs(a-1,b/26);
cout<<char('z'-(b%26));
}
int main()
{
int n,l;
cin>>n>>l;
dfs(n,l-1);
return 0;
}
L1-054 福到了
練習了下reverse(s.begin(),s.end())的使用,還有 replace(s.begin(),s.end(),"要替換的字元","替換成啥字元")
view code
#includeusing namespace std;
string s[105];
int main()
{
char o=getchar();
int n;cin>>n;
int mid=n/2+1;
if(n%2==0)mid=n/2;
int flag=0;
getchar();
for(int i=1;i<=n;i++){
getline(cin,s[i]);
if(i>mid){
string res(s[i]);
reverse(res.begin(),res.end());
if(s[2*mid-i].compare(res)!=0){
flag=1;
}
}
}
if(!flag)
cout<<"bu yong dao le\n";
for(int i=n;i>=0;i--){
reverse(s[i].begin(),s[i].end());
replace(s[i].begin(),s[i].end(),'@',o);
cout<<s[i];
if(i>0)
cout<<endl;
}
return 0;
}