Codeforces Round #439 div2 869A The Artful Expedient +869B The Eternal Immortality

869A The Artful Expedient 传送门

A自己写的T了……然后看了看别人的思路……惊了……

#include<iostream>
using namespace std;
int main()
{
  cout<<"Karen"<<endl;
  return 0;
}

orz 这里要用到异或的法则

1. a ⊕ a = 0
2. a ⊕ b = b ⊕ a
3. a ⊕b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c;
4. d = a ⊕ b ⊕ c 可以推出 a = d ⊕ b ⊕ c.
5. a ⊕ b ⊕ a = b.
6.若x是二进制数0101,y是二进制数1011;
则x⊕y=1110
只有在两个比较的位不同时其结果是1,否则结果为0
“两个输入相同时为0,不同则为1”
 
在本题中:

设xi^yj=z;

那么 xi^z=xi^yj^xi=yj,yj^z=yj^xi^yj=xi,xi与yj求异或值z,如果z在y[]中,那么xi^z=yj;如果z在x[]中,那yj^z=xi;

也就是一旦存在z属于这2n个数,那么对于xi/yj,必然存在z和yj/z和xi与其为一组(),即答案一定是偶数。

 869B The Eternal Immortality 传送门

求阶乘b!/a!的最后一位数……如果b-a>=10,(a,b]肯定存在一个10的倍数,最后一位肯定是0,其他的情况就……直接乘

#include<iostream>
typedef long long ll;
using namespace std;
ll a,b;
int main()
{
    ios::sync_with_stdio(false); 
    while(cin>>a>>b)
    {
        int ans=1;
        if(b-a>=10)
         ans=0;
        else 
        for(ll i=a+1;i<=b;i++)
        {
            ans=(i*ans)%10;
        }
        cout<<ans<<endl;
    } 
     return 0;
}
原文地址:https://www.cnblogs.com/Egoist-/p/7635694.html