目錄
一、賣菜
問題描述
試題編號: | 201809-1 |
試題名稱: | 賣菜 |
時間限制: | 1.0s |
內存限制: | 256.0MB |
問題描述: |
問題描述 在一條街上有n個賣菜的商店,按1至n的順序排成一排,這些商店都賣一種蔬菜。 輸入格式 輸入的第一行包含一個整數n,表示商店的數量。 輸出格式 輸出一行,包含n個正整數,依次表示每個商店第二天的菜價。 樣例輸入 8 樣例輸出 2 2 1 3 4 9 10 13 數據規模和約定 對於所有評測用例,2 ≤ n ≤ 1000,第一天每個商店的菜價爲不超過10000的正整數。 |
AC代碼:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int main(){
int n=0;
int a[1005];
cin>>n;
memset(a,0,sizeof(a));
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=1;i<=n;i++)
{
if(i==1)
{
cout<<(a[i]+a[i+1])/2<<" ";
}else if(i==n)
{
cout<<(a[i-1]+a[i])/2<<" ";
}
else
cout<<(a[i-1]+a[i]+a[i+1])/3<<" ";
}
return 0;
}
二、買菜
問題描述:
問題描述 小H和小W來到了一條街上,兩人分開買菜,他們買菜的過程可以描述爲,去店裏買一些菜然後去旁邊的一個廣場把菜裝上車,兩人都要買n種菜,所以也都要裝n次車。具體的,對於小H來說有n個不相交的時間段[a1,b1],[a2,b2]...[an,bn]在裝車,對於小W來說有n個不相交的時間段[c1,d1],[c2,d2]...[cn,dn]在裝車。其中,一個時間段[s, t]表示的是從時刻s到時刻t這段時間,時長爲t-s。 輸入格式 輸入的第一行包含一個正整數n,表示時間段的數量。 輸出格式 輸出一行,一個正整數,表示兩人可以聊多長時間。 樣例輸入 4 樣例輸出 3 數據規模和約定 對於所有的評測用例,1 ≤ n ≤ 2000, ai < bi < ai+1,ci < di < ci+1,對於所有的i(1 ≤ i ≤ n)有,1 ≤ ai, bi, ci, di ≤ 1000000。 |
思路:
分情況討論,比較他們一組的最後的時間線,
1、當H前面的時間>W的後面時間 ,那麼就依次判斷H的下個時間與W是否重合,直到有重合的時候,計算聊天時間。
2、當H後面的時間<W的前面時間,那麼就依次判斷H的下個時間與W是否重合,直到有重合的時候,計算聊天時間。
3、重複1和2的步驟,直到H的時間or W的時間線有一個用完了,代表所有的相同的時間段計算完了,直接輸入就好了。
AC代碼:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
struct DATA
{
int x;
int y;
};
int main(){
vector<DATA> a(0);
vector<DATA> b(0);
int sum=0;
int n=0;
DATA data;
int x,y;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>data.x>>data.y;
a.push_back(data);
}
for(int i=0;i<n;i++)
{
cin>>data.x>>data.y;
b.push_back(data);
}
int i=0;
int j=0;
while(i<n&&j<n)
{
if(b[j].x<=a[i].x)
{
if(b[j].y<=a[i].x)
{
sum+=0;
j++;
}
else if(b[j].y<=a[i].y)
{
sum+=b[j].y-a[i].x;
j++;
}
else if(b[j].y>a[i].y)
{
sum+=a[i].y-a[i].x;
i++;
}
}
else if(b[j].x<a[i].y)
{
if(b[j].y<=a[i].y)
{
sum+=b[j].y-b[j].x;
j++;
}
else if(b[j].y>a[i].y)
{
sum+=a[i].y-b[j].x;
i++;
}
}
else
{
sum+=0;
i++;
}
}
cout<<sum;
return 0;
}