交换学生(Foreign Exchange, UVa 10763)

有n(1≤n≤500000)个学生想交换到其他学校学习。为了简单起见,规定每个想从A学
校换到B学校的学生必须找一个想从B换到A的“搭档”。如果每个人都能找到搭档(一个人不
能当多个人的搭档),学校就会同意他们交换。每个学生用两个整数A、B表示,你的任务
是判断交换是否可以进行。

代码是在vj上抄的一位老哥的 

当时看到这个被惊呆了

  for(;*s1>='0';x = (x<<3)+(x<<1)+*s1++ - '0')

比较复杂的应该是上面那句 其实也很好理解 转换过来就相当于 x = x*8 + x*2 ;也就是x = x*10 不得不说使用这种方法读入速度确实很快 ,

解题思路就是如果是A 那么++ 如果是 B 那么 -- 如果最后是0的话那么说明 AB 是存在B A想要交换 (仔细的想下就可以的到这个结论)

#include 
using namespace std;

#define mem(a,b) memset(a,b,sizeof(a))
#define REP(i,n) for(int i = 0;i<(n);i++)
#define ios1 ios::sync_with_stdio(false)

const int maxd = 500005;
const int inf = 0x3f3f3f3f;

int n,s[maxd];
char d[1<<26],*s1 = d;
inline int f()
{
    for(;*s1<'/';s1++)
        ;
    register int x = *s1++-'0';
    for(;*s1>='0';x = (x<<3)+(x<<1)+*s1++ - '0')
            ;
    return x;
}
int main(void)
{
    freopen("input.in","r",stdin);
    fread(d,1,1<<26,stdin);
    while(n=f())
    {
        mem(s,0);
        for(int i = 0;i

 

你可能感兴趣的:(刘汝佳紫书)