做了三題,題目都比較暴力。
a題 題意:給你乙個三階的幻方,三階幻方指的是將1~9不重複的填入乙個3*3的矩陣當中,使得每一行、每一列和每一條對角線的和都是相同的。現在準備將乙個三階幻方中的一些陣列抹掉(0代替),交給你來進行還原,並且希望她能夠判斷出究竟是不是只有一組解。
如果只有一組解,輸出該三階幻方。如果多組解,輸出「too many」。(題目保證有解)
題解:純暴力,列舉被抹去位置的情況,並且判重加記錄就可以做出來。時間複雜度o(9!)。
**:
#include#include#include#include#include#include#include#include#include#include#include#include#include#define pi 2*asin(1.0)
#define ll long long
#define pb push_back
#define pa pair#define clr(a,b) memset(a,b,sizeof(a))
#define lson lr<<1,l,mid
#define rson lr<<1|1,mid+1,r
#define bug(x) printf("%d++++++++++++++++++++%d\n",x,x)
#define key_value ch[ch[root][1]][0]
const int mod = 1000000007;
const int n = 1e5+15;
const int maxn = 450;
const int letter = 130;
const int inf = 15000000;
const double pi=acos(-1.0);
const double eps=1e-8;
using namespace std;
inline int read()
while(ch>='0'&&ch<='9')
return x*f;
}int c[20],b[20],a[20],vis[20],dis[20],sum=0;
bool solve(int x,int y,int z)
void dfs(int x,int f)
return;
}if(a[x+1]) dfs(x+1,a[x+1]);
else for(int i=1;i<=9;i++)
}int main()
}else puts("too many");
return 0;
}
b題:
題意:(中文題簡單易懂)
題解:我們注意到隨著快取區k的增大,總延遲懲罰是在減少的,再看n的的大小只有100000,直接二分可做,並且可以利用優先佇列維護最大值即可。
時間複雜度o(logn*logn)
**:
#include#include#include#include#include#include#include#include#include#include#include#include#include#define pi 2*asin(1.0)
#define ll long long
#define pb push_back
#define pa pair#define clr(a,b) memset(a,b,sizeof(a))
#define lson lr<<1,l,mid
#define rson lr<<1|1,mid+1,r
#define bug(x) printf("%d++++++++++++++++++++%d\n",x,x)
#define key_value ch[ch[root][1]][0]
const int mod = 1000000007;
const int n = 1e5+15;
const int maxn = 450;
const int letter = 130;
const int inf = 1e17;
const double pi=acos(-1.0);
const double eps=1e-8;
using namespace std;
inline int read()
while(ch>='0'&&ch<='9')
return x*f;
}ll n,ps,a[n];
bool solve(ll x)
while(!q.empty())
/// printf("%lld %lld\n",x,sum);
return 1;
}int main()
else
}if(ans!=inf)printf("%lld\n",ans);
else puts("-1");
return 0;
}
c題
題意:(中文題簡單易懂)
題解:仔細分析下可以看出是完全揹包,但是有一些要注意的。揹包的容量應該為2*k,因為建築值肯定要超過k的。而且注意特判下,當建築值大於等於k的時候單獨拿出來計算,因為假如我的建築值為3k 4k的時候肯定是揹包更新不到的,所以特判下。時間複雜度:o(q*n*k*m)。
**:
#pragma comment(linker, "/stack:102400000,102400000")
#include#include#include#include#include#include#include#include#include#include#include#include#include#define pi 2*asin(1.0)
#define ll long long
#define pa pair#define pb push_back
#define clr(a,b) memset(a,b,sizeof(a))
#define lson lr<<1,l,mid
#define rson lr<<1|1,mid+1,r
#define bug(x) printf("%d++++++++++++++++++++%d\n",x,x)
const int mod = 1000000007;
const int n = 100+15;
const int maxn = 2e4 + 14;
const int inf = 1e17;
const int letter = 130;
const double pi=acos(-1.0);
const double eps=1e-10;
using namespace std;
inline int read()
while(ch>='0'&&ch<='9')
return x*f;
}int tc;
int n,m,k;
ll a[n],b[n],dp[maxn],t;
int main()
for(int x=b[j];x<=2*k;x++) dp[x]=min(dp[x-b[j]]+a[j],dp[x]);
}for(int j=k;j<=2*k;j++) ans=min(ans,dp[j]);
for(int j=1;j<=m;j++) b[j]/=t;
if(ans==inf)
sum+=ans;
}if(flag) puts("no answer");
else printf("%lld\n",sum);
}return 0;
}
Offer收割 程式設計練習賽7
比較容易想到是o n 2 的解決方案,遍歷n種刪除可能,每次遍歷o n 時間求總高度。前者優化比較困難,因而想辦法優化每次遍歷求高度的時間。由前往後遍歷,當刪除第i個時,先前的排版是連續的,從而通過計數器等累加方法可以求得已完整行的總高度presum,以及當前未完整行的w,h。include def...
Offer收割 程式設計練習賽26
題解 按照條件求解出最大的三角形和最小的三角形,然後求重心即可。這裡求解面積有兩種方法 海 式 p p a p b p c 將三角形的每一條邊求解出來,然後進行處理 用有向向量進行計算,如果設a x0,y 0 b x1,y 1 c x2,y 2 三點為三角形三個頂點,a 為有向面積,那麼2a x0 ...
Offer收割 程式設計練習賽30
題解 簡單的模擬題,大家懂的 include include include include include include include include include define fin freopen input.txt r stdin define fout freopen output...