امروز : جمعه Jan 09, 2009 6:45 am
ديدن موضوع قبلي | ديدن موضوع بعدي
 |
صفحه 6 از 7
|
| نويسنده |
پيغام |
ملایی
مدیر انجمن برنامه نویسی
تاريخ عضويت: 27 Feb 2006
تعداد ارسالها: 1121
محل سكونت: مشهد-هاشمیه
|
 Problem c :Crossed Matchings
این رو هم نوشتم واین هم time limit exeeded می خوره
خیلی عجیبه اگه یه test case رو حذف کنیم در کمتر از 0.2 ثانیه همه رو جواب میده ولی سر همون یکی گیر می کنه !!
نباید اینجوری باشه ! کسی می تونه بگه مشکل کجاست ؟
ورودی رو هم آخر گذاشتم.
code:#include <iostream>
#include <fstream>
#include <vector>
#include <ctime>
using namespace std;
int up[200],down[200];
int n1,n2,sum;
void go_2(int,int,int,int,int);
void go_1(int next_up,int next_down,int ans){
sum = ans > sum ? ans : sum;
for (int i=next_up;i<n1;++i)
for (int j=next_down;j<n2;++j)
if (up[i]==down[j] && sum < ((n2-j)/2+ans+1)){
go_2(i+1,next_down-1,j,ans,up[i]);
break;
}
}
void go_2(int next_up,int next_down,int before_down,int ans,int k){
for (int i=next_up;i<n1;++i)
if ((n1-i)/2+ans+1>sum){
for (int j=next_down;j<before_down;++j)
if (up[i]==down[j] && up[i]!=k ){
go_1(i+1,before_down+2,ans+1);
return ;
}
}
else
return ;
}
int main(){
ifstream in("sharif_99_C.in");
int m;
clock_t cl=clock();
for (in>>m;m>0;--m){
in >> n1 >> n2;
sum=0;
for (int i=0;i<n1;++i)
in >> up[i];
for (int i=0;i<n2;++i)
in >> down[i];
go_1(0,1,0);
cout << sum*2 << endl;
}
cout << "Time : " << (clock()-cl) * 0.001 << endl;
return 0;
}
_________________ آگه 50000 نفر هم به یک چیز اشتباه اعتقاد داشته باشن , اون چیز هنوز هم اشتباه است !
محمـــــــــــــــــــــدرضا . اگر گه گاهی سراغتون افتاد , خوشحال میشم : http://360.yahoo.com/molla652003
سوابق کاریه من :
معاد
روزی یک حدیث
ACM_sharif
طراحی الگوریتم
در اعماق بی کران
Art Of Programming
عکس های بچه ها
نماز
معرفی سایت های مفید
شعر های دوران مهدکودک
موفقیت
موسیقی
|
| 18 Aug 2007 01:10 am |
|
 |
|
|
ملایی
مدیر انجمن برنامه نویسی
تاريخ عضويت: 27 Feb 2006
تعداد ارسالها: 1121
محل سكونت: مشهد-هاشمیه
|
اینم ورودی این سوال
_________________ آگه 50000 نفر هم به یک چیز اشتباه اعتقاد داشته باشن , اون چیز هنوز هم اشتباه است !
محمـــــــــــــــــــــدرضا . اگر گه گاهی سراغتون افتاد , خوشحال میشم : http://360.yahoo.com/molla652003
سوابق کاریه من :
معاد
روزی یک حدیث
ACM_sharif
طراحی الگوریتم
در اعماق بی کران
Art Of Programming
عکس های بچه ها
نماز
معرفی سایت های مفید
شعر های دوران مهدکودک
موفقیت
موسیقی
|
| 20 Aug 2007 02:28 pm |
|
 |
ملایی
مدیر انجمن برنامه نویسی
تاريخ عضويت: 27 Feb 2006
تعداد ارسالها: 1121
محل سكونت: مشهد-هاشمیه
|
اینم سوال های سال 2000 :
اگر کسی test case های ورودی و خروجی اش رو داره لطفا همین جا بزاره چون من فعلا ندارم.
_________________ آگه 50000 نفر هم به یک چیز اشتباه اعتقاد داشته باشن , اون چیز هنوز هم اشتباه است !
محمـــــــــــــــــــــدرضا . اگر گه گاهی سراغتون افتاد , خوشحال میشم : http://360.yahoo.com/molla652003
سوابق کاریه من :
معاد
روزی یک حدیث
ACM_sharif
طراحی الگوریتم
در اعماق بی کران
Art Of Programming
عکس های بچه ها
نماز
معرفی سایت های مفید
شعر های دوران مهدکودک
موفقیت
موسیقی
|
| 08 Sep 2007 12:17 am |
|
 |
Saradar
تاريخ عضويت: 07 Apr 2007
تعداد ارسالها: 80
|
اينم از test case ها :
|
| 14 Sep 2007 06:22 am |
|
 |
Saradar
تاريخ عضويت: 07 Apr 2007
تعداد ارسالها: 80
|
 Promblem A:Number Step
code:#include"iostream"
#include"fstream"
using namespace std;
int main()
{
ifstream fin("a.in");
ofstream fout("a.out");
__int64 n,x,y,ans;
bool flag;
for(fin>>n;n>0;--n)
{
flag=true;
fin>>x>>y;
if((x!=y&&x-2!=y)||x<0||y<0)
flag=false;
else
{
if(x==y)
{
if(x%2==0)
ans=x*2;
else
ans=x*2-1;
}
else
{
if(x%2==0)
ans=2*y+2;
else
ans=2*y+1;
}
}
if(flag==true)
fout<<ans<<endl;
else
fout<<"No Number"<<endl;
}
return 0;
}
|
| 14 Sep 2007 02:28 pm |
|
 |
ملایی
مدیر انجمن برنامه نویسی
تاريخ عضويت: 27 Feb 2006
تعداد ارسالها: 1121
محل سكونت: مشهد-هاشمیه
|
 Lazy math instructor
اینم سوالیه که چند تا لط بچه ها حل کردن.
جای حروف عدد گذاشتن , جالبه !
code:
//Name=Lazy Math instructor
//Author:Corona team
#include<iostream>
#include<fstream>
#include<vector>
#include<string>
#include<conio.h>
#include<stack>
using namespace std;
int cal(string);
class node
{
public:
int num;
char ch2;
};
int main()
{
int temp1,temp2,n,i;
char ch;
string a,b;
ifstream in("c.in");
in>>n;
in.get(ch);
for(i=0;i<n;i++)
{
getline(in,a);
getline(in,b);
a.insert(0,"(");
a.insert(a.size(),")");
b.insert(0,"(");
b.insert(b.size(),")");
temp1=cal(a);
temp2=cal(b);
if (temp1==temp2)
cout<<"YES\n";
else cout<<"NO\n";
}
return 0;
}
int cal(string a)
{
vector<int> v;
stack<char> st;
char ch=0,ch1='a';
int temp=0,temp1=0,temp2=0,i=0,j=0;
vector<node> vn;
node tempvn;
for(i=1;ch1<='z';i++,ch1++)
{
tempvn.num=i%10;
tempvn.ch2=ch1;
vn.push_back(tempvn);
}
for(i=0;i<a.size();i++)
if (a[i]==' ' || a[i]=='\t')
a.erase(a.begin()+i);
for(i=0;i<a.size();i++)
for(j=0;j<vn.size();j++)
if(a[i] == vn[j].ch2)
a[i]=vn[j].num+48;
for (i=0;i<a.size();i++)
{
ch=0;
if (a[i]=='(')
st.push(a[i]);//////////////
else if (a[i]>='0' && a[i]<='9')
v.push_back(a[i]-48);
else if (a[i] =='+' || a[i]=='-')
{
if(st.top()=='*')
{
st.pop();
temp=v[v.size()-1] * v[v.size()-2];
v.erase(v.begin()+v.size()-1);
v.erase(v.begin()+v.size()-1);
v.push_back(temp);
}
else if(st.top()=='+' || st.top()=='-')
{
ch=st.top();
st.pop();
}
st.push(a[i]);
if (ch == '+')
{
temp=v[v.size()-1] + v[v.size()-2];
v.erase(v.begin()+v.size()-1);
v.erase(v.begin()+v.size()-1);
v.push_back(temp);
}
else if (ch == '-')
{
temp=v[v.size()-2] - v[v.size()-1];
v.erase(v.begin()+v.size()-1);
v.erase(v.begin()+v.size()-1);
v.push_back(temp);
}
}
else if (a[i]=='*')
st.push(a[i]);
else if (a[i]==')')
{
while(st.top() != '(')
{
ch=st.top();
st.pop();
temp1=v[v.size()-1];
temp2=v[v.size()-2];
switch(ch)
{
case '+':temp1+=temp2;
v.erase(v.begin()+v.size()-1);
v.erase(v.begin()+v.size()-1);
v.push_back(temp1);
break;
case '-':temp1=temp2-temp1;
v.erase(v.begin()+v.size()-1);
v.erase(v.begin()+v.size()-1);
v.push_back(temp1);
break;
case '*':temp1*=temp2;
v.erase(v.begin()+v.size()-1);
v.erase(v.begin()+v.size()-1);
v.push_back(temp1);
break;
}
}
st.pop();
}
}
return v[0];
}
_________________ آگه 50000 نفر هم به یک چیز اشتباه اعتقاد داشته باشن , اون چیز هنوز هم اشتباه است !
محمـــــــــــــــــــــدرضا . اگر گه گاهی سراغتون افتاد , خوشحال میشم : http://360.yahoo.com/molla652003
سوابق کاریه من :
معاد
روزی یک حدیث
ACM_sharif
طراحی الگوریتم
در اعماق بی کران
Art Of Programming
عکس های بچه ها
نماز
معرفی سایت های مفید
شعر های دوران مهدکودک
موفقیت
موسیقی
|
| 18 Sep 2007 04:53 pm |
|
 |
ملایی
مدیر انجمن برنامه نویسی
تاريخ عضويت: 27 Feb 2006
تعداد ارسالها: 1121
محل سكونت: مشهد-هاشمیه
|
 B: puzzlestan
نو حل این سوال هم از goto استفاده کردم , هم از random !!
کی میگه بده ؟ خیلی هم خوبه اگه بتونی درست ازشون استفاده کنی.
راستی اجراش کنین . زمان اجرا رو میده 0 !!! آره صفر . و این غیر ممکنه ! نمی دونم شاید زمان کمتر از 0.0005 رو به پایین گرد می کنه ؟
کسی می دونه دلیلش چیه ؟
code:#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <cmath>
#include <ctime>
using namespace std;
vector <string> first,ans;
int sure[7][7];
int n,m;
struct rely {
int a,b,c,d;
char ch;
};
void wher (char x,char y,int row1,int row2,int &i,int &j){
i=ans[row1].find(x);
j=ans[row2].find(y);
}
int main(){
srand( (unsigned)time( NULL ) );
clock_t cl=clock();
first.assign(7,"");
ans.assign(7,"");
int T;
ifstream in("sharif_00_b.in");
in >> T;
while (T--){
in >> n>> m;
for (int i=0;i<n;++i){
in >> first[i];
ans[i]=first[i];
for (int j=0;j<m;++j)
if (i==0)
sure[i][j]=1;
else
sure[i][j]=0;
}
vector <rely> r;
rely t;
in >> t.a >> t.b >> t.ch >> t.c >> t.d;
while ( t.a!=0 ){
--t.a , --t.b , --t.c ,--t.d ;
r.push_back(t);
in >> t.a >> t.b >> t.ch >> t.c >> t.d;
}
bool flag=true;
int h1; // random mishe !! :D
while (flag) {
flag = false;
for ( int l=0;l<r.size();++l) {
int q,w;
wher (first[r[l].a][r[l].b],first[r[l].c][r[l].d],r[l].a,r[l].c,q,w);
// A= r[l].a , q & J=r[l].c,w in ans
if (r[l].ch == 'R' ){
if (sure[r[l].a][q]==0 && sure[r[l].c][w]==1 && sure[r[l].a][w]==0){
if (q!=w) flag=true;
sure[r[l].a][w]=1;
swap ( ans[r[l].a][q] , ans[r[l].a][w] );
}
else if (sure[r[l].a][q]==1 && sure[r[l].c][w]==0 && sure[r[l].c][q]==0){
if (q!=w) flag=true;
sure[r[l].c][q]=1;
swap ( ans[r[l].c][w] , ans[r[l].c][q] );
}
else if (! sure[r[l].a][q] && !sure[r[l].c][w] ){ // bayad uni ke behtare entekhab beshe !! che juri ?
if (sure[r[l].a][w]==0 && sure[r[l].a][q]==0 && sure[r[l].c][q]==0 && sure[r[l].c][w]==0 )// har dohalat mojaz bashan
if (rand()%2==1)
goto L1;
else
goto L2;
if (sure[r[l].a][w]==0 && sure[r[l].a][q]==0){
L1: swap ( ans[r[l].a][q] , ans[r[l].a][w] );
if (q!=w) flag=true;
}
else if (sure[r[l].c][q]==0 && sure[r[l].c][w]==0){
L2: swap ( ans[r[l].c][w] , ans[r[l].c][q] );
if (q!=w) flag=true;
}
}
}
else if (q==w){ // age tu yek sotun an , bayad uni ke behtare avaz beshe beshe? aslan fargh mikone?
if (sure[r[l].a][q]==0){
for (h1=rand()%m;;h1=rand()%m)
if (sure[r[l].a][h1]==0 && h1!=q){
swap (ans[r[l].a][q],ans[r[l].a][h1]);
flag=true;
break;
}
}
else if (sure [r[l].c][w]==0)
for (h1=rand()%m;;h1=rand()%m)
if (sure[r[l].c][h1]==0 && h1!=w){
swap (ans[r[l].c][w],ans[r[l].c][h1]);
flag=true;
break;
}
}
}
}
for (int i=0;i<m;++i){
for (int j=0;j<n;++j)
cout << ans[j][i];
cout << endl;
}
cout << endl;
}
cout << "Time: " << (clock()-cl) *0.001 << endl;
return 0;
}
_________________ آگه 50000 نفر هم به یک چیز اشتباه اعتقاد داشته باشن , اون چیز هنوز هم اشتباه است !
محمـــــــــــــــــــــدرضا . اگر گه گاهی سراغتون افتاد , خوشحال میشم : http://360.yahoo.com/molla652003
سوابق کاریه من :
معاد
روزی یک حدیث
ACM_sharif
طراحی الگوریتم
در اعماق بی کران
Art Of Programming
عکس های بچه ها
نماز
معرفی سایت های مفید
شعر های دوران مهدکودک
موفقیت
موسیقی
|
| 27 Sep 2007 05:08 pm |
|
 |
ملایی
مدیر انجمن برنامه نویسی
تاريخ عضويت: 27 Feb 2006
تعداد ارسالها: 1121
محل سكونت: مشهد-هاشمیه
|
 C: Dynamic Declaration Language
خب این سوال کلی قاعده قانون گذاشته بود . باید همون ها رو درست پیاده سازی مس کردی و چیزه خاصی نداشت , غیر از توضیحی که تو سطر اول نوشتم
code:
// switch ( string ) nemifhme !!
#include <iostream>
#include <fstream>
#include <map>
#include <vector>
#include <string>
#include <sstream>
using namespace std;
int main() {
int T;
ifstream in("sharif_00_c.in");
in >> T;
for (int t=1;t<=T;++t){
map <string,pair<int,bool> > m; // int vase meghdaresh , bool vase in ke bebinim bad az akharin Dcl taghir karde ya na !
//m["x"].first=0;
int n;
in >> n;
cout << t << endl;
vector <string> s(n+1);
string st;
for (int j=0;j<n+1;++j){
getline(in,st,'\n');
s[j]=st;
}
stringstream ss;
ss << s[1];
int i=1;
bool flag=true;
while (flag){
ss >> st;
if (st == "DCL" ){
ss >> st;
if ( m.find(st)!=m.end() )
if (m[st].second==0) cout << i << " 1" << endl;
m[st].first=0;
m[st].second=0;
++i;
}
else if (st == "INC" ) {
ss >> st;
if ( m.find(st)==m.end() )
cout << i << " 2" << endl;
else
m[st].first++ , m[st].second=1;
++i;
}
else if (st == "DEC" ) {
ss >> st;
if ( m.find(st)==m.end() )
cout << i << " 2" << endl;
else
m[st].first-- , m[st].second=1;
++i;
}
else if (st == "END" )
flag=false;
else if (st == "GOTO" ){
ss >> st;
if (m.find(st)==m.end() ){
if (isdigit(st[0]) || st[0]=='-'){
stringstream temp;
temp << st;
temp >> i;
}
else{
ss >> st;
cout << i << " 2" << endl;
++i;
}
}
else {
int temp;
ss >> temp;
if (m[st].first > 0)
i=temp;
else
++i;
}
}
else {
int temp1; char temp2;
ss >> temp2;
ss >> temp1;
if (m.find(st)==m.end())
cout << i << " 2" << endl;
else {
m[st].first=temp1 ;
m[st].second =1;
}
++i;
}
ss.clear();
ss << s[i];
}
}
return 0;
}
_________________ آگه 50000 نفر هم به یک چیز اشتباه اعتقاد داشته باشن , اون چیز هنوز هم اشتباه است !
محمـــــــــــــــــــــدرضا . اگر گه گاهی سراغتون افتاد , خوشحال میشم : http://360.yahoo.com/molla652003
سوابق کاریه من :
معاد
روزی یک حدیث
ACM_sharif
طراحی الگوریتم
در اعماق بی کران
Art Of Programming
عکس های بچه ها
نماز
معرفی سایت های مفید
شعر های دوران مهدکودک
موفقیت
موسیقی
|
| 28 Sep 2007 11:34 pm |
|
 |
ملایی
مدیر انجمن برنامه نویسی
تاريخ عضويت: 27 Feb 2006
تعداد ارسالها: 1121
محل سكونت: مشهد-هاشمیه
|
 F:Buggy Sat
اومدم مساحت رو به کمک ضرب خارجی حساب کردم , خودش هم که نقطه ها رو به ترتیب داده.
region ای که بیشترین مساحت رو داشته باشه میشه جواب . همین !
code:
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
struct point {
double x,y;
point(){}
point (double a,double b){
x=a,y=b;
}
};
double ex_mult(point &a,point &b){
return ((a.x*b.y)-(a.y*b.x));
}
int main(){
ifstream in("sharif_00_f.in");
int t,n,region;
vector <int> temp;
for (in >> t;t>0;--t){
in >> n;
vector <point> p;
point te;
for (int i=0;i<n;++i){
in >> te.x >> te.y;
p.push_back(te);
}
in >> n;
vector < vector <int> > v;
int num;
for (int i=0;i<n;++i){
in >> num;
temp.resize(num);
for (int j=0;j<num;++j)
in >> temp[j];
v.push_back (temp);
}
double max_area=0,sum;
int ans=0;
for (int i=0;i<n;++i){
sum=0;
for (int j=0;j<v[i].size();++j)
sum += ex_mult(p[v[i][j]-1],p[v[i][(j+1)%v[i].size()]-1]);
if (sum>max_area){
max_area=sum;
ans=i+1;
}
}
cout << ans << endl;
}
return 0;
}
_________________ آگه 50000 نفر هم به یک چیز اشتباه اعتقاد داشته باشن , اون چیز هنوز هم اشتباه است !
محمـــــــــــــــــــــدرضا . اگر گه گاهی سراغتون افتاد , خوشحال میشم : http://360.yahoo.com/molla652003
سوابق کاریه من :
معاد
روزی یک حدیث
ACM_sharif
طراحی الگوریتم
در اعماق بی کران
Art Of Programming
عکس های بچه ها
نماز
معرفی سایت های مفید
شعر های دوران مهدکودک
موفقیت
موسیقی
|
| 02 Oct 2007 04:00 pm |
|
 |
ملایی
مدیر انجمن برنامه نویسی
تاريخ عضويت: 27 Feb 2006
تعداد ارسالها: 1121
محل سكونت: مشهد-هاشمیه
|
 Problem D: color tunnels
به صورت پویا حل میشه و تمرکز می خواد !
توضیحات بیشتر تو کد به صورت comment گذاشتم :
code:#include <iostream>
#include <ctime>
#include <vector>
#include <fstream>
#include <cmath>
#include <iomanip>
#define pow2(x) ((x)*(x))
using namespace std;
struct point{
double x,y;
bool operator ==(point &p) const {
return (p.x == x && p.y == y );
}
};
struct line {
point sar,tah;
double length;
};
struct cross {
point now; // neshun mide alan in masir be kodum noghte reside
int tunnel;
double sum;
cross(){
sum=0;
}
};
inline double dist(point &p,point &q){
return sqrt(pow2(p.x-q.x)+pow2(p.y-q.y));
}
int way[30];
int main(){
clock_t cl=clock();
ifstream in("sharif_00_d.in");
int T;
in >> T;
while (T--){
vector <vector <line> > v (101);// tunnel haye hamrang ro ye ja mizarim
point s,t;
in >> s.x >> s.y >> t.x >> t.y;
int step; in >> step;
for (int i=0;i<step;++i)
in >> way[i];
int n;
in>>n;
line temp;
int color;
for (int i=0;i<n;++i){
in >> temp.sar.x >> temp.sar.y >> temp.tah.x >> temp.tah.y >> color;
temp.length = dist (temp.sar,temp.tah);
v[color].push_back(temp);
}
vector <vector<cross> > c(step);
cross temp1;
for (int i=0;i<step;++i){
for (int j=0;j<v[way[i]].size();++j){
if (i==0){
temp1.now = v[way[i]][j].tah;
temp1.sum = dist(s,v[way[i]][j].sar) + v[way[i]][j].length;
temp1.tunnel=i+1;
c[i].push_back(temp1);
temp1.now = v[way[i]][j].sar;
temp1.sum = dist(s,v[way[i]][j].tah) + v[way[i]][j].length;
c[i].push_back(temp1);
}
else
for (int k=0;k<c[i-1].size();++k){
temp1.now = v[way[i]][j].tah;
temp1.sum = c[i-1][k].sum + dist(c[i-1][k].now,v[way[i]][j].sar) + v[way[i]][j].length;
temp1.tunnel=i+1;
c[i].push_back(temp1);
temp1.now = v[way[i]][j].sar;
temp1.sum = c[i-1][k].sum + dist(c[i-1][k].now,v[way[i]][j].tah) + v[way[i]][j].length;
c[i].push_back(temp1);
}
}
// hazf:
if (i!=0){
for (int l=0;l<c[i].size();++l)
for (int o=l+1;o<c[i].size();++o)
if (c[i][l].now == c[i][o].now)
if ( c[i][l].sum < c[i][o].sum){
c[i].erase(c[i].begin()+o);
--o;
continue;
}
else if ( c[i][l].sum > c[i][o].sum){
c[i].erase(c[i].begin()+l);
--l;
break;
}
}//if
}
double ans=1000000000;
for (int i=0;i<c[step-1].size();++i)
ans = min (ans,c[step-1][i].sum + dist(c[step-1][i].now,t));
cout << fixed << setprecision(14) << ans << endl;
// khat hayi ke rangeshun ba way yekiye ro entekhab mikonim va ye bar az sar be tah mirim ye bar az tah be sar :D
// bayad tahe khat ( age az sar berim tah :d ) , az beyne tamame masir haye ke ta hala be inja residan va way ashun yekiye
// min entekhab beshe ( baghiye hazf beshan )
}
cout << "Time: " << ( clock()-cl ) * 0.001 << endl;
return 0;
}
_________________ آگه 50000 نفر هم به یک چیز اشتباه اعتقاد داشته باشن , اون چیز هنوز هم اشتباه است !
محمـــــــــــــــــــــدرضا . اگر گه گاهی سراغتون افتاد , خوشحال میشم : http://360.yahoo.com/molla652003
سوابق کاریه من :
معاد
روزی یک حدیث
ACM_sharif
طراحی الگوریتم
در اعماق بی کران
Art Of Programming
عکس های بچه ها
نماز
معرفی سایت های مفید
شعر های دوران مهدکودک
موفقیت
موسیقی
|
| 15 Oct 2007 01:31 am |
|
 |
ملایی
مدیر انجمن برنامه نویسی
تاريخ عضويت: 27 Feb 2006
تعداد ارسالها: 1121
محل سكونت: مشهد-هاشمیه
|
 Problem I: 3002 Rubbery
این سوال های G و H چه جوری حل میشن؟
مخصوصا اون dolphin pool , اصلا هیچ راهی به نظرم نمی رسه !
code:#include <queue>
#include <vector>
#include <fstream>
#include <iostream>
#include <algorithm>
using namespace std;
#include <ctime>
struct point {
int x,y;
point (int x1,int y1) : x(x1) , y(y1) {}
};
struct dpoint {
double x,y;
dpoint (double x1,double y1) : x(x1) , y(y1) {}
};
struct region{
int x1,y1,x2,y2; // up_left & down_right of each region
int area;
int banner ; // 0 means free,1 means availble,2 means obstacle
};
struct line {
int x1,y1,x2,y2; // x2>x1 & y2>y1
line (int x3,int y3,int x4,int y4) : x1(x3) , x2(x4) , y1(y3) , y2(y4) {}
};
double whichside (point a,point b,dpoint c){
return ( ( a.x * b.y ) - ( b.x * a.y ) + ( b.x * c.y ) - ( c.x * b.y ) + ( c.x * a.y ) - ( a.x * c.y ) );
}
bool isfree (const region &r ,const vector <line> &v ,const vector <line> &h ){
int up=0,right=0;
double x=double (r.x1+r.x2)/2 , y = double (r.y1+r.y2) /2 ;
for (int i=0;i<h.size();++i)
if ( whichside ( point (h[i].x1,h[i].y1) , point (h[i].x2,h[i].y1) , dpoint ((double)x,(double)y) ) < 0 && x>h[i].x1 && x<h[i].x2)
++up ;
for (int i=0;i<v.size();++i)
if ( whichside ( point (v[i].x1,v[i].y1) , point (v[i].x1,v[i].y2) , dpoint ((double)x,(double)y) ) < 0 && y>v[i].y1 && y<v[i].y2)
++right;
if ( right%2==0 && up%2==0 )
return true;
return false;
}
int main(){
clock_t cl=clock();
ifstream in ("sharif_00_i.in");
int T; in >>T;
while (T--){
int length,width; in >> length >> width;
vector <line> vertical , horizontal;
vector <int> xs,ys; // we need this cordinates to create region matrix
vector <int> ::iterator x_end,y_end;
xs.push_back(0);xs.push_back(length);
ys.push_back(0);ys.push_back(width);
int n,m; in >> n;
for (int b=0;b<n;++b){
in >> m;
point t(0,0), t2(0,0);
in >> t.x >> t.y; /*t.x-- , t.y-- ;*/
xs.push_back(t.x) ; ys.push_back(t.y);
int X,Y ; // for lines that not given
X=t2.x=t.x ; Y=t2.y=t.y;
for (int i=1;i<m;++i){
in >> t.x >> t.y; /*t.x-- , t.y-- ;*/
xs.push_back(t.x) ; ys.push_back(t.y);
if ( t.x != t2.x )
horizontal.push_back ( line (min(t.x,t2.x),min(t.y,t2.y),max(t.x,t2.x),max(t.y,t2.y)));
else
vertical.push_back ( line (min(t.x,t2.x),min(t.y,t2.y),max(t.x,t2.x),max(t.y,t2.y)));
t2.x=t.x , t2.y=t.y;
}
if ( X != t2.x )
horizontal.push_back ( line (min(X,t2.x),min(Y,t2.y),max(X,t2.x),max(Y,t2.y)));
else
vertical.push_back ( line (min(X,t2.x),min(Y,t2.y),max(X,t2.x),max(Y,t2.y)));
}
// stupidly sort :
sort (xs.begin(),xs.end());
sort ( ys.begin(),ys.end());
x_end = unique (xs.begin(),xs.end());
y_end = unique(ys.begin(),ys.end());
xs.erase( x_end , xs.end() );
ys.erase(y_end , ys.end() );
//create matrix :
vector <vector < region > > r (xs.size()-1 , vector <region> (ys.size()-1) );
for (int i=0;i<xs.size()-1;++i){
for (int j=0;j<ys.size()-1;++j){
r[i][j].x1=xs[i]; r[i][j].x2=xs[i+1];
r[i][j].y1=ys[j]; r[i][j].y2=ys[j+1];
r[i][j].area = ( (xs[i+1]-xs[i])*(ys[j+1]-ys[j]) );
}
}
for (int i=0;i<r.size();++i)
for (int j=0;j<r[i].size();++j)
if (! isfree( r[i][j], vertical , horizontal ) )
r[i][j].banner=2 ; // obstacle
queue <point> q;
q.push(point(r.size()-1,0));
while (!q.empty() ){
point p=q.front() ; q.pop();
if (r[p.x][p.y].banner==2)
continue;
r[p.x][p.y].banner=1; //available
if ( p.x > 0 && r[p.x-1][p.y].banner==0 )
q.push(point(p.x-1,p.y));
if ( p.y < r[p.x].size()-1 && r[p.x][p.y+1].banner==0 )
q.push(point(p.x,p.y+1));
}
int ans=0;
for (int i=0;i<r.size();++i)
for (int j=0;j<r[i].size();++j)
if (r[i][j].banner==0)
ans+=r[i][j].area;
cout << ans << endl;
}
cout << "Time: " << (clock() - cl ) * 0.001 << endl;
return 0;
}
// mohammad reza :D
_________________ آگه 50000 نفر هم به یک چیز اشتباه اعتقاد داشته باشن , اون چیز هنوز هم اشتباه است !
محمـــــــــــــــــــــدرضا . اگر گه گاهی سراغتون افتاد , خوشحال میشم : http://360.yahoo.com/molla652003
سوابق کاریه من :
معاد
روزی یک حدیث
ACM_sharif
طراحی الگوریتم
در اعماق بی کران
Art Of Programming
عکس های بچه ها
نماز
معرفی سایت های مفید
شعر های دوران مهدکودک
موفقیت
موسیقی
|
| 08 Nov 2007 11:26 pm |
|
 |
|
|
امروز : جمعه Jan 09, 2009 6:45 am | تمام ساعات و تاريخها بر حسب 4.5+ ساعت گرينويچ مي باشد
|
صفحه 6 از 7
|
|