小白プログラミング|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コード
要点
実は最初は10点しか取れなかったのですが、1サイクルしか入れていませんでしたが、入力したWちゃんで直接前のHちゃんと比べていましたが、あまり正しくないことに気づきました.長区間は1回以上対比していないかもしれませんので、ブログを参考にしましたhttps://blog.csdn.net/qq_42375636/article/details/88910857
いろいろなことを考えて、もっと練習すれば思考が発散するかもしれません.私はまだそんな考えがないような気がします.まぁ、毎日少しずつ上達しています.
上記の状況は列が完全ではないかもしれませんが、補充を歓迎します.
問題を解く構想.
このテーマは交差を求めて、長い区間を逃すことができなくて、また誤審することができなくて、そこで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
いろいろなことを考えて、もっと練習すれば思考が発散するかもしれません.私はまだそんな考えがないような気がします.まぁ、毎日少しずつ上達しています.
上記の状況は列が完全ではないかもしれませんが、補充を歓迎します.