标签:c++
3 4 10 20 30 40 50 60 70 80 2 1 3 2 200 3 10 100 20 80 30 50
10 20 30
思路:
这题不是怎么难的题,就是细节比较多。
(1)输入时左边数据可能大于右边
(2)走廊的那幅图是有用的,规定偶数和奇数的特点。如:3-5与6-8是不能同时移动桌子的
我的代码:
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; struct S { int L; int R; int flag; }a[210]; bool cmp(const S& p,const S&q) { return p.R>q.R; } int main() { int n,m,i,j,k,t; scanf("%d",&n); while (n--) { scanf("%d",&m); for (i=0;i<m;++i) { scanf("%d %d",&a[i].L,&a[i].R); if (a[i].L>a[i].R) { swap(a[i].L,a[i].R); } a[i].flag=1; } sort(a,a+m,cmp); for (i=0,t=0;i<m;++i) { k=a[i].L; if (a[i].flag) { t++; for (j=i+1;j<m;++j) { if (a[j].flag) { if (!(k&1)&&k-1>a[j].R) { a[j].flag=0; k=a[j].L; } else if((k&1)&&k>a[j].R) { a[j].flag=0; k=a[j].L; } } } } } cout << t*10 << endl; } return 0; }
标程:
#include<cstring> #include<cstdio> #include<map> #include<string> #include<algorithm> #include<vector> #include<iostream> using namespace std; const int M=210; #define CLR(arr,val) memset(arr,val,sizeof(arr)) int cnt[M]; int main() { //freopen("in.txt","r",stdin); int t,n,a,b; scanf("%d",&t); while(t--) { scanf("%d",&n); // cerr<<n<<endl; CLR(cnt,0); for(int i=0;i!=n;i++) { scanf("%d%d",&a,&b); if(a>b) swap(a,b); for(int j=(a-1)/2;j<=(b-1)/2;j++) ++cnt[j]; } //copy(cnt,cnt+202,ostream_iterator<int>(cerr," ")); printf("%d\n",*max_element(cnt,cnt+202)*10); } }
标签:c++
原文地址:http://blog.csdn.net/zsc2014030403015/article/details/45010335