【USACO1.4】解題報告
前言
本章主要考的是貪心和一些比較麻煩的模擬。難度相比上一章有很明顯的提升。但是稍微想一下還是可以想出來的(第五題除外,看了一下題解的思路)。
USACO:http://train.usaco.org
1.4.2.Mixing Milk
思路:
很明顯是一道貪心基礎題。肯定是要先買每單位價錢最便宜的,然後再依次買貴的。這個不用證明了吧。。。
程式碼:
/*
ID:ssl_zyc2
TASK:milk
LANG:C++
*/
#include <cstdio>
#include <algorithm>
#define N 5100
using namespace std;
int n,m,ans;
struct node
{
int p,d;
}a[N];
bool cmp(node x,node y)
{
return x.p<y.p;
}
int main()
{
freopen("milk.in","r",stdin);
freopen("milk.out","w",stdout);
scanf("%d%d",&n,&m);
for (int i=1;i<=m;i++)
scanf("%d%d",&a[i].p,&a[i].d);
sort(a+1,a+1 +m,cmp); //以價格排序
for (int i=1;i<=m;i++)
if (a[i].d<n) //可以全部買完
{
n-=a[i].d; //全部買完
ans=ans+a[i].d*a[i].p;
}
else
{
ans=ans+a[i].p*n; //將不夠的部分買完
break;
}
printf("%d\n",ans);
return 0;
}
1.4.3.Barn Repair
思路:
首先假設買一塊長度為第
個牛棚
第
個牛棚的木板,然後我們可以試著把這塊木板分成
塊(也就是切割
次!),那麼最優的肯定是先將兩個牛棚之間距離最大的部分割掉,然後割掉第二大的。。。以此類推。
要特判可用木板數
牛棚數的情況。
程式碼:
/*
ID:ssl_zyc2
TASK:barn1
LANG:C++
*/
#include <cstdio>
#include <algorithm>
#define N 250
using namespace std;
int n,m,k,a[N],b[N],sum;
bool cmp(int x,int y)
{
return x>y;
}
int main()
{
freopen("barn1.in","r",stdin);
freopen("barn1.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
if (n>=k)
{
printf("%d\n",k);
return 0;
}
for (int i=1;i<=k;i++)
scanf("%d",&a[i]);
sort(a+1,a+1+k);
sum=a[k]-a[1]+1; //一塊木板
for (int i=1;i<k;i++)
b[i]=a[i+1]-a[i]; //求出任意兩個相鄰的牛棚之間的距離
sort(b+1,b+k,cmp);
for (int i=1;i<n;i++) //只能切n-1次!!!
sum=sum-b[i]+1;
printf("%d\n",sum);
return 0;
}
1.4.5.Prime Cryptarithm
思路:
由於每一個
只可能是
到
中的任意一個數字,那麼我們可以列舉乘數裡面的五個
分別是多少,然後就可以推出中間的六個
的值和答案的四個
的值。那麼久判斷每一個值是否合法即可。
時間複雜度:
程式碼:
/*
ID:ssl_zyc2
TASK:crypt1
LANG:C++
*/
#include <cstdio>
#include <iostream>
using namespace std;
int n,a,b,ans;
bool p[11];
bool check(int x,int y)
{
y++;
while (x)
{
if (!p[x%10]) return 0;
x/=10;
y--;
if (!y) return 0;
}
return 1;
}
int main()
{
freopen("crypt1.in","r",stdin);
freopen("crypt1.out","w",stdout);
cin>>n;
int x;
for (int i=1;i<=n;i++)
{
cin>>x;
p[x]=1;
}
for (int i=1;i<=9;i++)
if (p[i])
for (int j=0;j<=9;j++)
if (p[j])
for (int k=0;k<=9;k++)
if (p[k])
for (int l=1;l<=9;l++)
if (p[l])
for (int q=0;q<=9;q++) //列舉5個*
if (p[q])
if (check((i*100+j*10+k)*l,3))
if (check((i*100+j*10+k)*q,3)) //判斷中間的六個*
if (check((i*100+j*10+k)*(l*10+q),4)) //判斷積中的四個*
ans++;
printf("%d\n",ans);
return 0;
}
1.4.6.Combination Lock
思路:
暴力模擬。很簡單吧。。。
小心陣列越界。
程式碼:
/*
ID:ssl_zyc2
TASK:combo
LANG:C++
*/
#include <cstdio>
#define N 120
using namespace std;
int n,sum,a,b,c,d,e,f;
bool p[N][N][N];
int main()
{
freopen("combo.in","r",stdin);
freopen("combo.out","w",stdout);
scanf("%d%d%d%d%d%d%d",&n,&a,&b,&c,&d,&e,&f);
for (int i=a-2;i<=a+2;i++)
for (int j=b-2;j<=b+2;j++)
for (int k=c-2;k<=c+2;k++) //第一個密碼
if (!p[(i+n-1)%n+1][(j+n-1)%n+1][(k+n-1)%n+1])
{
p[(i+n-1)%n+1][(j+n-1)%n+1][(k+n-1)%n+1]=1;
sum++;
}
for (int i=d-2;i<=d+2;i++)
for (int j=e-2;j<=e+2;j++)
for (int k=f-2;k<=f+2;k++) //第二個密碼
if (!p[(i+n-1)%n+1][(j+n-1)%n+1][(k+n-1)%n+1])
{
p[(i+n-1)%n+1][(j+n-1)%n+1][(k+n-1)%n+1]=1;
sum++;
}
printf("%d\n",sum);
return 0;
}
1.4.7.Wormholes
思路:
有點難度啊。
由於貝西只能往下走,那麼她所在位置的下面第一個蟲洞就是會被傳走的地方。
那麼設
表示在
下面的第一個蟲洞(
座標要相同,
座標嚴格小於且最近)。然後就深搜,搜出配對的方案後就判斷是否成立。成立就記錄。
程式碼:
/*
ID:ssl_zyc2
TASK:wormhole
LANG:C++
*/
#include <cstdio>
using namespace std;
int f[15],next[15],n;
int check()
{
for (int i=1;i<=n;i++)
{
int u=i;
for (int j=1;j<=n;j++)
u=next[f[u]]; //是否死迴圈
if (u) return 1;
}
return 0;
}
int dfs(int s)
{
if (s==n/2) return check(); //搜好了
int x;
for (x=1;x<=n;x++)
if (!f[x]) break; //沒有配對
int ans=0;
for (int i=1;i<=n;i++)
if (i!=x&&!f[i])
{
f[x]=i;
f[i]=x;
ans+=dfs(s+1);
f[x]=0;
f[i]=0;
}
return ans;
}
int main()
{
freopen("wormhole.in","r",stdin);
freopen("wormhole.out","w",stdout);
scanf("%d",&n);
int x[15],y[15];
for (int i=1;i<=n;i++)
scanf("%d%d",&x[i],&y[i]);
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (i!=j)
if (y[i]==y[j]&&x[j]>x[i]&&(!next[i]||x[next[i]]>x[j]))
next[i]=j;
printf("%d\n",dfs(0));
return 0;
}
1.4.8.Ski Course Design
思路:
由於山峰高度只有 ,那麼就可以列舉山峰最矮高度,然後再列舉每個山峰,如果不夠或高出那麼就計算所需費用。然後將所有費用取最小值即可。
程式碼:
/*
ID:ssl_zyc2
TASK:skidesign
LANG:C++
*/
#include <cstdio>
#include <algorithm>
#define N 1010
using namespace std;
int h[N]
相關推薦
【USACO1.4】解題報告
前言
本章主要考的是貪心和一些比較麻煩的模擬。難度相比上一章有很明顯的提升。但是稍微想一下還是可以想出來的(第五題除外,看了一下題解的思路)。 USACO:http://train.usaco.org
1.4.2.Mixing Milk
思路:
很明顯是一道貪心基礎
【USACO1.3】解題報告
前言
這一章主要考察的是一些簡單的數論和思維轉化能力。還是相對來說比較簡單的。 USACO:http://train.usaco.org
1.3.2.Milking Cows
思路:
字首和基礎題。 每次讀到有人在
【USACO1.2】解題報告
前言
以後將會不定期刷USACO的題目。每做完一小章會寫一份解題報告。這一小章裡面較簡單或者並不是很重要的題目就會直接放在裡面。而比較重要的題目就會單獨寫部落格,在這裡面放連結。 這一章很簡單,全部都是很基礎的題目。就直接在這裡面一筆帶過。 USACO:http://train.us
【USACO1.5】解題報告
前言
這章只有兩道題,但是質量都不比上一章低。 第一題正解肯定很難,但是資料神奇般的把
O
(
【USACO1.6】解題報告
前言:
這章的三道題目中有兩道是可以用
D
F
S
【USACO2.1】解題報告
前言
USACO2.1主要內容是圖論。其中有幾道題是要用深搜做的。而另外幾道題則是利用模擬的方法來完成簡單圖論。 總體來說難度還是比較小的,算是最基礎的演算法吧。 UASCO:http://train.usaco.org
2.1.3.The Castle
題解
【USACO2.2】解題報告
前言
然而只有一道動態規劃的題目。。。 其他三道題都是模擬。。。 難度還是有所增加的。至少在洛谷中又有一道藍題了。 USACO:http://train.usaco.org
USACO2.2.3.Preface Numbering
思路: 我們會發現羅馬數字中每一位都
【USACO2.3】解題報告
前言
本章主要是動態規劃,但是其中幾道題的方法比較多,我採用了其他的方法。 題目已經開始變難,有幾道題還特別值得思考。已經達到普及
T
3
洛谷 T28312 相對分子質量【2018 6月月賽 T2】 解題報告
字符 pac ... 給定 substr ++ 錯誤 如果 題目 T28312 「化學」相對分子質量
題目描述
做化學題時,小\(F\)總是裏算錯相對分子質量,這讓他非常苦惱。
小\(F\)找到了你,請你來幫他算一算給定物質的相對分子質量。
如果你沒有學過相關內容也沒有關系
校內賽 codeforces 827D【最小生成樹】【樹鏈剖分】 解題報告
找不到題面!!
題意
給出一張n(<=2e5)個點 m(<=2e5)條邊無向圖,保證有生成樹。對於每條邊,給出一個最大值maxLength,咦即能夠保證這條邊能夠出現在所有的最小生成樹中,邊權的最大值為maxLength(同時,其他所有邊長度不變
【線上筆試題解題報告系列】網易2017校招內推筆試之程式設計題【持續更新】
網易今年把內推筆試放在牛客網上辦,然後出了一批程式設計題。
題目在:
一共18個,好多(不同崗位抽3個不同的題的樣子)……
慢慢寫吧,做一題寫一題。
以下題解將假定讀者有下列知識,對下面所列舉的細節不再贅述。
(如果有必要對此進行教學的,請站內信我)
C/C++的基本
【Google Kickstart Round_H】解題報告
序
Problem A. Big Buttons
題意
一個長度為 nnn 的 01串,該字串有 mmm 個不能出現的字首,問這樣的字串有多少種?
題解
由於 n,mn,mn,m 的範圍很小,直接建
2018.3.28【 AtCoder beginner092-C 】解題報告(線性處理)
C - Traveling PlanTime limit : 2sec / Memory limit : 256MBScore : 300 pointsProblem StatementThere are N sightseeing spots on the x-axis,
【Zhou Ping 's 解題報告】為了有資格參加亞洲區ACM而奮鬥
C 字串轉換
Accept:78
Submit:471
Time Limit:1000MS
Memory Limit:65536KB
Description
我們將僅由若干個同一小寫字母構成的字串稱之為簡單串,例如"aaaa
【leetcode 5040. 邊框著色】解題報告
posit 整數 d+ perf src check 網格 orm poi 給出一個二維整數網格 grid,網格中的每個值表示該位置處的網格塊的顏色。
只有當兩個網格塊的顏色相同,而且在四個方向中任意一個方向上相鄰時,它們屬於同一連通分量。
連通分量的邊界是指連通分量中
【leetcode 94. 二叉樹的中序遍歷】解題報告
stack traversal roo tree order targe blank span etc
前往二叉樹的:前序,中序,後序 遍歷算法
方法一:遞歸
vector<int> res;
vector<int>
【leetcode 145. 二叉樹的後序遍歷】解題報告
中序 stack mage blank res tor tac 前序 top
前往二叉樹的:前序,中序,後序 遍歷算法
方法一:遞歸
vector<int> res;
vector<int> postorderTrave
【leetcode 968. 監控二叉樹】解題報告[待完善...]
由於 camera 需要 spa alt img 狀態 數量 turn
方法一:遞歸
// 0:該節點安裝了監視器 1:該節點可觀,但沒有安裝監視器 2:該節點不可觀
int monitor = 0;
int state(TreeNod
【leetcode 106. 從中序與後序遍歷序列構造二叉樹】解題報告
++ amp src 圖片 ima 遍歷序列 tree cto 建立
前往 中序,後序遍歷構造二叉樹, 中序,前序遍歷構造二叉樹
TreeNode* build(vector<int>& inorder, int l1, int r1,
【leetcode 105. 從前序與中序遍歷序列構造二叉樹】解題報告
nullptr treenode ref != 圖片 lan size htm amp
前往 中序,後序遍歷構造二叉樹, 中序,前序遍歷構造二叉樹
TreeNode* build(vector<int>& preorder, int l