1. 程式人生 > 其它 >鄭州大學2022年春季天梯賽省賽選拔賽暨實驗室招新賽

鄭州大學2022年春季天梯賽省賽選拔賽暨實驗室招新賽

  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)
            break
; } cout<<now; }
D

  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=1
;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]; }
L

  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