小白プログラミング|CCF CSP 201809-2野菜を買う(構想分析)

8764 ワード

誤り訂正:QQ 1002726595
問題を解く構想.
このテーマは交差を求めて、長い区間を逃すことができなくて、また誤審することができなくて、そこで1つ1つ比較して、いくつかの情況を考慮しなければなりません
シーケンス番号
ケース
小H
小W
操作
1
EndTime(H) < StartTime(W)
[1,2]
[3,4]
グループをスキップ
2
EndTime(W) < StartTime(W)
[5,10]
[3,4]
小さいWの次のグループと小さいHのこのグループで引き続き対比して、どのようにコードの注釈の中で書きます
3
一般区間
[1,5]
[3,4]
時間=終了時間が早い-開始時間が遅い
ACコード
#include

using namespace std;

/*/
4
1 3
5 6
9 13
14 15
2 4
5 7
10 11
13 14

//*/

//     
struct Time{
	int from,to;
};

Time T1[2005];
Time T2[2005];

int main(){
	int n;
	scanf("%d",&n);
	int res = 0;
	//  1:   H    
	for(int i = 0; i < n; i ++){
		scanf("%d %d",&T1[i].from,&T1[i].to);	 
	}
	//  2:   W    
	for(int i = 0; i < n; i ++){
		scanf("%d %d",&T2[i].from,&T2[i].to);
	}
	for(int i = 0; i < n; i ++){
		//  3:     
		for(int j = 0 ; j < n ; j ++){
			//  4:   W       H      ,        break     
			if(T2[j].from >= T1[i].to){
				break;
			}
			/*/
			  5:
			   W       H      ,     W     H   
			       W   H     
			  :
			 H      W
			5  10 | 3  4
			11 20 | 6  7
			21 30 | 8  9 
			//*/
			if(T2[j].to <= T1[i].from){
				continue;
			}
			//  6:    =      -       
			//[11,20]  [12,15]  =  15 - 12 = 3
			res += min(T1[i].to,T2[j].to) - max(T1[i].from,T2[j].from);
		} 
	}
	printf("%d",res);
	return 0;
}

要点
実は最初は10点しか取れなかったのですが、1サイクルしか入れていませんでしたが、入力したWちゃんで直接前のHちゃんと比べていましたが、あまり正しくないことに気づきました.長区間は1回以上対比していないかもしれませんので、ブログを参考にしましたhttps://blog.csdn.net/qq_42375636/article/details/88910857
いろいろなことを考えて、もっと練習すれば思考が発散するかもしれません.私はまだそんな考えがないような気がします.まぁ、毎日少しずつ上達しています.
上記の状況は列が完全ではないかもしれませんが、補充を歓迎します.