vijos 1602
https://www.vijos.org/p/1062點擊打開鏈接
今天這個題目做了很久,可能對于一些大佬來說很簡單,但是對于我這樣的弱雞來說還是挺有難度的,因為我總是想不到該用什么方法去解決它,今天看著題解想了好久,但是不能保證理解的對不對,如果有什么不對的,還希望大佬前來指教一下,謝謝。
************************************************************
①對于一對舞伴男生站在女生的左邊。
②任何一對舞伴之間,要么沒有人,要么就有若干對舞伴
*********************************************************
這是題目的要求;(以下根據樣例來進行講解)
#include <cstdio> #include <iostream> #include <stack> using namespace std; int main() {ios::sync_with_stdio(false);int n;scanf("%d",&n);int str[15050],book[15050]={0};//一定要注意數組的范圍,小心REfor(int i=1;i<=n;i++){scanf("%d",&str[i]);for(int j=str[i];j>=1;j--){if(book[j]==0){cout<<str[i]-j+1<<" ";book[j]=1;break;}}}return 0; }| 4 | 5 | 6 | 6 | 6 | 6 |
str[0]????????????????????????????? str[1]??????????????????????? str[2]?????????????????????? str[3]???????????????????? str[4]??????????????????????????? str[6]
接下來我們根據女孩子來寫出一個男孩子的數組,不過這個數組是一個標記數組(0,1);book[]
| 1 | 2 | 3 | 4 | 5 | 6 |
數字代表6個男孩子;代表從左向右第幾個男孩;
for(int j=str[i];j>=1;j--)? str[i]不是代表女孩左邊有多少個男孩嗎,那就從第str[i]開始往前找,找出第一個沒有匹配的男孩
if(book[j]==0)//表示沒有匹配
{
??? cout<<str[i]-j+1<<" ";//直接輸出距離
?? book[j]==1;//進行標記
}
總結
以上是生活随笔為你收集整理的vijos 1602的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高等数学期末复习——知识点梳理
- 下一篇: Telnet访问邮件服务器