Time of Update: 2018-12-04
質數唯一分解、階乘的性質:N!中含多少個x#include <iostream>#include <cstring> using namespace std;int getsum(int n,int x){int ans=0;while(n){ans+=n/x; n/=x;}return ans;}int main(int argc, char *argv[]){int
Time of Update: 2018-12-04
#include <iostream>using namespace std; int main(int argc, char *argv[]){long long n,i,nn,ans,temp,flag,t=1;while(cin>>n&&n){i=2; flag=0; ans=0; nn=n;cout<<"Case "<<t++<<": ";if(n==1) {cout<<2<<endl;
Time of Update: 2018-12-04
點擊開啟題目連結此題一類比可知是斐波那契數列,可以知道由多少位組成,怎麼產生這一序列是個問題?下面是別人的思路:詳細說明:ans[1]=1 , ans[2]=1 ,ans[3]=2 , ans[4]=3 , ans[5]=5 , ans[6]=8 , ans[7]=13 ,ans[8]=21 ,ans[9]=34sum[1]=1 , sum[2]=2 ,sum[3]=4 , sum[4]=7 , sum[5]=12 , sum[6]=20 , sum[7]=33 ,sum[8]=54 ,sum[
Time of Update: 2018-12-04
http://poj.org/problem?id=1080http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=27/*zoj 1027 poj 1080 思路: 三種狀態,取最大值:s1[i]和s2[j]配 :dp[i-1][j-1]+cost[my[s1[i]]][my[s2[j]]];s1[i]和'-' 配: dp[i-1][j]+cost[my[s1[i]]][my['-']];s2[j]和'-' 配:
Time of Update: 2018-12-04
統計[m,n]這個區間有多少個0分位元分析:n的第i位為0=n左邊的數(高位)*10^(i-1)n的第i位不為0 =(n左邊的數-1)*10^(i-1)+(i位右邊的數+1)ans=f(n)-f(m-1);#include <iostream>using namespace std;long long sum0(long long left) { long long sum=1,mid,right=0,j=1; while(left>=10){mid=left%10;
Time of Update: 2018-12-04
#include <iostream>#include <string>#include <algorithm>#include <queue>using namespace std;struct argus{int num,period,time;bool operator <(const argus &x) const{return
Time of Update: 2018-12-04
#include <iostream>#include <algorithm>using namespace std;int n,p[1005]; struct bian{ int x,y,d; }e[15005],ans[1005];int cmp(bian a1,bian b1){ return a1.d<b1.d;}void init(){ for(int i=1;i<=n;i++) p[i]=i;}int find(int
Time of Update: 2018-12-04
#include <iostream>using namespace std;int a[105][105],b[105],n;int prim(int ii){ int i,j,k,min,ans=0,t; for(i=0;i<n;i++) b[i]=a[ii][i]; b[ii]=-1; for(i=1;i<n;i++) { for(min=2<<20,j=0;j<n;j++)
Time of Update: 2018-12-04
#include<stdio.h>#include<string.h>#define NUM 100#define maxint 10000void dijkstra(int n,int v,int dist[],int prev[],int c[][NUM]){int i,j;bool s[NUM];for(i=1; i<=n; i++){dist[i] = c[v][i];s[i] = false;if (dist[i]>maxint) prev[i] =
Time of Update: 2018-12-04
對給定的f(n) 當 n>=50025002 的時候,f(n)=n-5;當 n<50025002 的時候,f(n)=f(f(n+2005)) 給定n,求出發f(n)如果使用遞迴,則會棧溢出!!!可以遞迴化迴圈:用m表示f的層數,f(m,n)表示參數n嵌套了m層f,例如f(3,n)=f(f(f(n)))f(1,n)=f(n)f(0,n)=n//當 n>=50025002 的時候,f(n)=n-5;當 n<50025002
Time of Update: 2018-12-04
#include <iostream>#include <algorithm>using namespace std;int main(int argc, char *argv[]){int n,i,j,a[10005],ans,temp;while(cin>>n&&n){for(i=0;i<n;i++)
Time of Update: 2018-12-04
c++中的map原來可以一多對!#include <iostream>#include <map>#include <vector>using namespace std;map<int,vector<int> > d;int main(int argc, char *argv[]){int n,m,i,j,k,v;while(cin>>n>>m){for(i=1;i<=n;i++){cin>>
Time of Update: 2018-12-04
文章目錄 此題在基礎BFS上加入了門和鑰匙,要找齊所有鑰匙才能開門,所以要對門特殊處理。1.先統計下各類鑰匙的數量,再記下門的位置。3.如果遇到門,判斷鑰匙是否找齊,若齊,入隊,標記已訪問;不齊,不入隊,標記已訪問。4.其他的按正常的BFS即可。
Time of Update: 2018-12-04
旋轉對中序遍曆沒有影響,直接中序輸出即可。#include <iostream>#include <cstdio>using namespace std;int n;struct Shu{int left,rigth;}shu[1000005];int zhong(int id){if(id>=0){zhong(shu[id].left);cout<<id<<endl;zhong(shu[id].rigth);}}int main(int
Time of Update: 2018-12-04
#include <iostream>#include <cstdio>const int N=10000;using namespace std;int a[1005][1005],b[1005],bz[1005],lj[1005],xq[1005],ma;int djik(int s){int i,j,k,mi;for(i=1;i<=ma;i++) { b[i]=a[s][i]; bz[i]=0; } bz[s]=1; b[s]=0;
Time of Update: 2018-12-04
題目大意:這個題是以坦克大戰為原型出來的題目,就是走迷宮的變種,給定一個地圖mxn的地圖,地圖上有普通的磚B,金磚S,河R,空地E,和一個寶物位置T,和你的位置Y,求吃到寶物的最小步數(坦克通過普通磚B需要兩步,空地E一步,不能通過金磚和河)..#include <queue>#include <iostream>using namespace std;int n,m;int mintime[305][305];char map[305][305];struct
Time of Update: 2018-12-04
// floyd + 位元運算/* 題目大意:有若干家公司,他們分別在若干個城市的路由器間鋪設了自己的光纖,現在問,如果要從路由器A到路由器B傳送資料,能否只使用一家公司的光纖而達到目的,如能則分別輸出這些公司的代號。思路:雖然不是最短路,卻可以用每對頂點的最短路徑 floyd-warshell 演算法來求解。dist[i][j]代表 i 到 j 的一條可能包含前k個點中若干個頂點的所有路徑中最短的路徑。而在本題中graph[i][j]代表i 到 j
Time of Update: 2018-12-04
1033173337333739377987798179ans=6將1033變成8179的最少次數,每次變化只能改變一位,且改變後的四位元還是素數。#include <iostream>#include <queue>#include <cstring>using namespace std;struct gai{int x,step;}e;queue<gai> q;int bz[1000005];int allprim[10005];int
Time of Update: 2018-12-04
// BFS 的 Edmonds_Karp#include <iostream>#include <queue>using namespace std;const int N = 210;//頂點最多個數const int INF = 0x7FFFFFFF;//無窮大int n,m,map[N][N],path[N],flow[N],start,end;//n為頂點,m為邊,map為鄰接矩陣queue<int> q;int bfs(){ int
Time of Update: 2018-12-04
點擊開啟題目連結此題一看暴力是肯定不行的,只能找規律,推公式.題目要求是每次取完之後剩下的數的和是3的倍數,那麼這個組成這剩下的和的元素中有多少個是3的倍數呢,假設經過統計有count 個,除了這count個之外剩下的數肯定都不能被3整除,只是這些不能整除3的數的和能整除3,試想一下,要是我拿走了這其中的一個,那剩下所有數的和就肯定不能整除3,那就意味著取不了了,所以每次只能取是3的倍數的元素,知道某個人沒有是3的倍數的元素可取了,就輸了!!!#include <iostream>#