**這隻是一個作業,如果有幫到您的,我隻能說。。。這不科學。。。 **
————————————華麗的分割線————————————
第一題:

第一個想法:用最基礎的找質數思路解
資料範圍太大,int級,怎麼辦。。。。
正解與暴力隻差幾個字元。。。搜尋隻搜到sqrt就行了。。。
貼代碼~~~
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <iostream>
#include <cstring>
#include <ctime>
#include <algorithm>
#include <queue>
#include <map>
#define ci const int
#define ri register int
#define ll long long
#define reg register
#define boom return
#define cmax(a,b) (a)>(b)?(a):(b)
#define cmin(a,b) (a)<(b)?(a):(b)
#define For(i,a,b) for(i=a;i<b;i++)
using namespace std;
int a;
int main()
{
int i;
scanf("%d",&a);
for(i=sqrt(a);;i--)
if(!(a%i)){printf("%d",a/i);return 0;}
}
//沒有什麼是兩個巴掌不能解決的,如果有就再來兩個巴掌
————————————華麗的分割線————————————
第二題:
先吐槽一下:這題目真心長啊。。。
不過還是按照以往的慣例:暴力
首先從第一層開始,按照規則模拟累加,一直到頂層,輸出;
可是這有n層,每層要循環x次,O(nx)絕對絕對過不了。
怎麼辦?這時就要用上我們暴力的好幫手:縮小範圍了
我們可以在輸入時先算出每層有樓梯的房間的個數。
然後把每個x膜(模)這個數。
然後就O(nm)了
(這題本來想用線上算法的可這惡心的輸入把最重要的資訊放最後。。。)
下面代碼醬:
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <iostream>
#include <cstring>
#include <ctime>
#include <algorithm>
#include <queue>
#include <map>
#define ci const int
#define ri register int
#define ll long long
#define reg register
#define boom return
#define cmax(a,b) (a)>(b)?(a):(b)
#define cmin(a,b) (a)<(b)?(a):(b)
#define For(i,a,b) for(i=a;i<b;i++)
using namespace std;
int n,m,nowm,ans,poi[10086][110],add[10086];
bool sta[10086][110];
int main()
{
int i,j,k;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
for(j=0;j<m;j++)
{
scanf("%d%d",&sta[i][j],&poi[i][j]);
add[i]+=sta[i][j];
}
scanf("%d",&nowm);
for(i=1;i<=n;i++)
{
ans=(ans+poi[i][nowm])%20123;
k=poi[i][nowm],k=(k-1)%add[i]+1;
while(k)if(k-=sta[i][nowm])nowm=(nowm+1)%m;
}
printf("%d\n",ans);
return 0;
}
//沒有什麼是兩個巴掌不能解決的,如果有就再來兩個巴掌
對了還有一件事就是這題坑很多
下面是坑的總結(由
————————————華麗的分割線————————————
第三題:
一道dp
狀态:f[i][j]表示就擺前i種花共j盆的方案數
狀态轉移方橙:
f[i][j]=(f[i][j]+f[i-1][j-k])%1000007|k=0~min(a[i]>j)
代碼:
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <iostream>
#include <cstring>
#include <ctime>
#include <algorithm>
#include <queue>
#include <map>
#define ci const int
#define ri register int
#define ll long long
#define reg register
#define boom return
#define cmax(a,b) (a)>(b)?(a):(b)
#define cmin(a,b) (a)<(b)?(a):(b)
#define For(i,a,b) for(i=a;i<b;i++)
using namespace std;
ci MAXN=110;
int n,m,a[MAXN],f[MAXN][MAXN];
int main()
{
int i,j,k,l;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)scanf("%d",&a[i]);
f[0][0]=1;
// cout<<n<<" "<<m<<endl;
for(i=1;i<=n;i++)
for(j=0;j<=m;j++)
{
l=a[i]>j?j:a[i];
for (k=0;k<=l;++k)f[i][j]=(f[i][j]+f[i-1][j-k])%1000007;
// cout<<n<<" "<<m<<endl;
}
printf("%d",f[n][m]);
return 0;
}
//沒有什麼是兩個巴掌不能解決的,如果有就再來兩個巴掌
————————————華麗的分割線————————————
第四題:
文化之旅。。。
做完這道題我沒文化了。
這道題AC的方法有很多(話說我為啥不寫正解有很多呢)
比如說我就是Floyd判是否排斥的。。。
不過這道題有個很惡心的地方。。。
就是這道題沒有正解。。。(明白了把qwq)
當年
看到洛谷上有人寫A*。、。
也錯了。,。
————————————華麗的分割線————————————
今天洛谷大吉好開森~~~