Codeforces Round #439 (Div. 2)A,B

http://codeforces.com/contest/869
1 给定两个数组,问你是否存在a[i]^b[j] 存在与a或b数组中。
规定,这2*n个数字都是不同的
统计符合条件的 数对 为奇数还是偶数。。
模拟。。
或者,ai xor bj = ak,那么ak xor bj = ai。
所以一定是偶数。。。
还wa了一次,两个数异或,是可能大于这两个数的max的。。

#include <bits/stdc++.h>
using namespace std;
const int maxn=2e3+200;
int a[maxn];
int b[maxn];
const int maxm=2e8+100;
bool vis[maxm];
int main()
{   int m;
    while(~scanf("%d",&m)){
          memset(vis,false,sizeof(vis));
          for(int i=1;i<=m;i++)
              scanf("%d",&a[i]),vis[a[i]]=true;
           for(int i=1;i<=m;i++)
               scanf("%d",&b[i]),vis[b[i]]=true;
           int sum=0;
           for(int i=1;i<=m;i++){
               for(int j=1;j<=m;j++){
                   if(vis[a[i]^b[j]])
                    sum++;
               }
           }
           if(sum%2){
             puts("Koyomi");
           }
           else
            puts("Karen");
    }
    return 0;
}

2 给定a,b
输出a!/b!的最后一位。。
用的那个最后一位的规律写的,比较麻烦。
后来发现,如果存在0,一定是0.。
否则的话,最多算十次。。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll sum;
ll a,b;
ll num[10];
ll  num2[10];
int tim[11][8]={
 {
     0
 },
 {1},
 {6,2,4,8},
 {1,3,9,7},
 {
     6,4
 },
 {5
 },
 { 1,6,9,3

 },
 {
     1,7,9,3
 },
 {  6,8,4,2
 },
 { 1,9
 },
};
int v[11];
int main()
{   while(~scanf("%lld%lld",&a,&b)){
          memset(num,0,sizeof(num));
          memset(num2,0,sizeof(num2));
          ll t=a/10;
          v[2]=4;
          v[3]=4;
          v[4]=2;
          v[7]=4;
          v[8]=4;
          v[9]=2;
          for(int i=0;i<=9;i++){
             num[i]=t;
          }
          //cout<<t<<endl;
          ll ss=a%10;
          for(int i=0;i<=ss;i++){
              num[i]++;
              //cout<<i<<endl;
          }
          t=b/10;
          for(int i=0;i<=9;i++){
             num2[i]=t;
          }
           ss=b%10;
          for(int i=0;i<=ss;i++){
              num2[i]++;
          }
          int sum=1;
          for(int i=0;i<=9;i++){
              ll ttt=num2[i]-num[i];
              if(ttt>0){
              if(i==0||i==1||i==5||i==6)
                 sum*=i;
              else
                 sum*=tim[i][ttt%v[i]];
              }
          }
          sum=sum%10;
          printf("%d\n",sum);
     }
    return 0;
}
#include <bits/stdc++.h>
using namespace std;
/* 直接模拟就行。注意有10,一定是0
*/
typedef long long ll;
int main()
{   ll a,b;
    while(~scanf("%lld%lld",&a,&b)){
          ll ans=1;
          bool flag=false;
          for(ll l=a+1;l<=b&&!flag;l++){
              if(l%10==0) flag=true;
              else
               ans*=l;
              ans%=10;
          }
          if(flag)
            puts("0");
          else
            printf("%d\n",ans);
   }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值