鄭州大學2022年春季天梯賽省賽選拔賽暨實驗室招新賽
阿新 • • 發佈:2022-03-27
D題是輸出n的階乘對ull自然溢位的結果。考慮到階乘在乘的時候有很多2,所以算到某個數後2的次數達到了ull的2的數量就會永久變成0.於是等於0後直接break即可。
#include<bits/stdc++.h> using namespace std; int main() { unsigned long long now=1,n; cin>>n; for(unsigned long long i=1;i<=n;i++) { now=now*i; if(now==0) breakD; } cout<<now; }
A題經典蝸牛爬井。輸出(h-x+x-y-1)/(x-y)+1即可。
L題是已知矩形三個點的座標,求第四個點的座標。我寫的是先排序xi,如果x1=x2那麼第四個點的x也是第三個點的x,輸出x[3];否則第四個點的x是第一個點的x,輸出x[1]。y同理。下來之後聽說可以直接異或,非常可惜。因為如果知道有異或的話就可以用於寫M題的突破口了。
#include<bits/stdc++.h> using namespace std; int x[10],y[10]; int main() { for(int i=1L;i<=3;i++) cin>>x[i]>>y[i]; sort(x+1,x+1+3); sort(y+1,y+1+3); if(x[1]==x[2]) cout<<x[3]<<' '; else cout<<x[1]<<' '; if(y[1]==y[2]) cout<<y[3]; else cout<<y[1]; }
K題詢問當前時刻起,下一個迴文時刻是什麼。我的做法是看數時刻看做高精度數加法,復原出字串,判斷是否是迴文串並輸出。
#include<bits/stdc++.h> using namespace std; int read() { int x; scanf("%d",&x); return x; } string ss; int h,m,s; int ask() { ss=""; ss=ss+char('0'+h/10); ss=ss+char('0'+h%10); ss=ss+char('0'+m/10); ss=ss+char('0'+m%10); ss=ss+char('0'+s/10); ss=ss+char('0'+s%10); for(int i=0;i<3;i++) if(ss[i]!=ss[5-i]) return 0; return 1; } int main() { scanf("%d:%d:%d",&h,&m,&s); while(1) { s++; if(s==60) s=0,m++; if(m==60) h++,m=0; if(h==24) h=0; if(ask()) { printf("%02d:%02d:%02d",h,m,s); return 0; } } }K