【GDUT新生賽】部分題目回顧以及學到的一些新知識(自我學習用)
阿新 • • 發佈:2020-12-08
#include <bits/stdc++.h> using namespace std; char a[5][10]={"Cow","Pig","Cow","Pig","Pig"}; int main(){ int t; cin>>t; while(t--){ int n; cin>>n; n%=5; cout<<a[n]<<endl; } return 0; }
這題我是直接找的規律,官方題解給出的是“若能開出第k槍,必定能開出第k+5槍”,而事實上也是5輪一迴圈
但我還是搞不懂原理是啥。後來群友指導是可以用SG函式。參考了部分文獻後有點啟發,但是不敢說很懂,日後來填坑。
————————————————————————————————————————————————————————————————————————————————————————————————
知識點2:數學(兩題)
https://ac.nowcoder.com/acm/contest/9692/D
#include <bits/stdc++.h> using namespace std; int solve(int x,int p){ int ans=0; while(x>=p){ ans+=(x/p); x/=p; } return ans; } int main(){ ios::sync_with_stdio(false),cin.tie(0); int t; cin>>t; while(t--){ int n,p; cin>>n>>p; cout<<solve(n,p)<<endl; } return 0; }
這裡涉及到數學知識。首先我們要知道如果q進位制轉換為p進位制的做法是除p取餘法
因此題目等價與求n的p因子個數
有點無法理解的話就模擬一下十進位制轉換二進位制的過程
https://ac.nowcoder.com/acm/contest/9692/E
這題是一道思維題,其實和求gcd沒啥關係的,注意到k是gcd(i,j)的因數,那麼i,j也一定能整除k
因此我們直接找n,m的k的倍數有幾個,然後相乘就行了。
答案是就是(n/k)(mk)
(程式碼都懶得貼了hhhhhhh)