您的位置:首页 > 其它

九度题目1486:False coin

2016-09-01 21:04 253 查看
泪奔题……说不尽的尴尬 ,在POJ已经AC 九度至今还WA着呢 已疯。

在poj上终于找到一组没考虑的数据,就是多个个答案皆可的情况也要输出0,一开始想着要考虑的 写到后面就忘记了

代码思路

1、判断符号,等于号直接就标记OK,如果是大于号直接交换左右两边的位置,让他变成小于号

2、假设每一个硬币(最暴力方法),对于每一条表达式判断合不合理,注意在多个硬币都合理的情况下要输出0;

#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
int n,m;
char c;
int a[2005][2005];
int b[2005][2005];
int f[2005];
int g[2005];
int h[2005];
int p[2005];
//g[i]=1 表示不可能是
// possible = 1 , imposibble = 0, ans = 2;
int main()
{
while(~scanf("%d%d",&n,&m))
{
int flag = 0;
fill(f,f+n,1);
memset(g,0,sizeof(g));
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(h,0,sizeof(h));
memset(p,0,sizeof(p));
for(int i = 0 ; i < m;i++)
{
scanf("%d",&p[i]);
for(int j = 0;j<p[i];j++)
scanf("%d",&a[i][j]);
for(int j = 0;j<p[i];j++)
scanf("%d",&b[i][j]);
getchar();
scanf("%c",&c);
if(c=='=')
{
h[i] = 0;
for(int j = 0;j<p[i];j++)
{
g[a[i][j]]= 1;
g[b[i][j]]= 1;
}
}
if(c=='>')
{
for(int j = 0;j<p[i];j++)
swap(a[i][j],b[i][j]);
h[i] = 1;
}
if(c=='<')
h[i] = 1;
}
int ans = 0;
int fl,fg;
for(int j = 1 ; j <= n;j++)
{
fl = 1;fg = 1;
int fll = 1;int fgg = 1;
if(g[j]==1)
{
fll = 0;
fgg = 0;
continue;
}
else
{
for(int i = 0 ; i < m;i++)
{
if(h[i])
{
int sumz=0;
int sumy=0;
for(int k = 0;k<p[i];k++)
{
if(a[i][k]!=j)
sumz++;
if(b[i][k]!=j)
sumy++;
// cout<<"p,k: "<<p[i]<<" "<<k<<endl;
//   cout<<"a,b:"<<a[i][k]<<" "<<b[i][k]<<endl;
}
// cout<<"sumz,sumy: "<<sumz<<" "<<sumy<<endl;
if(sumz>=sumy)
fl = 0;
sumz = 0;
sumy = 0;
for(int k = 0;k<p[i];k++)
{
if(a[i][k]!=j)
sumz++;
else
sumz +=2;
if(b[i][k]!=j)
sumy++;
else
sumy +=2;
}
if(sumz>=sumy)
fg = 0;
fll = fll&&fl;
//fl = fll;
fgg = fgg&&fg;
//fg = fgg;
//                       cout<<"j:"<<j<<endl;
//                       cout<<fgg<<" "<<fll<<endl;
}

}
// cout<<"j:"<<j<<endl;
//  cout<<fgg<<" "<<fll<<endl;
if(fll||fgg)
{
if(!flag)
{
ans = j;
flag = 1;
}
else
{
ans = 0;
}

}

}
}
cout<<ans<<endl;

}
}

/*
5 3
2 3 4 1 2
>
1 1 4
=
1 2 5
=

9 3
3 1 2 3 4 5 6
<
3 7 8 9 4 5 3
>
2 1 2 4 5
=
6 4
3 1 2 3 4 5 6
<
1 1 2
=
2 1 3 4 5
<
2 4 5 2 6
>

3 2
1 1 2
<
1 2 3
>

5 2
1 1 4
=
1 2 5
=
---- 答案是 3 ----
2 1
1 1 2
>
---- 答案是 0 ----
5 3
2 1 3 2 4
>
2 3 5 2 4
>
1 1 4
>
---- 答案是 4 ----
5 3
1 2 3
<
1 1 2
>
1 3 4
=
---- 答案是 2 ----
3 2
1 1 2
<
1 1 3
<
---- 答案是 1 ----
5 1
2 1 2 3 4
=

3 2
1 1 2
<
1 2 3
>
5 2
1 1 2
=
1 3 4
=
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: