zoukankan      html  css  js  c++  java
  • Codeforces Round #268 (Div. 2)

    补题解:

    E:只会第四种解法;也只看懂了这一种。

    PS:F[X+10^18]=F[X]+1;F[X]表示X的数字之和; 

    假设X,F[10^18+X]+F[10^18+X-1]+......F[10^18+1]=F[1]+.....+F[X]+X;

        这个应该没问题所以有G[10^18+X]-G[10^18]=G[X]+X;

    G[X]表示:1-X的数字和的总和;

    根据G[10^X]=45*X*10^(X-1);所以G[10^18]=45*18*10^17;

    所以G[10^18+X]-G[X]=(G[10^18]+X)%a;

    然后就可以推出时X的大小,X=a-G[10^18]%a;

    这样这题就完美解决;

     1 #include <stdio.h>
     2 #include<iostream>
     3 void solve(){
     4     unsigned long long  s = 100000000000000000ll;
     5     __int64 p = s * 10;
     6     __int64 a;
     7     scanf("%I64d",&a);
     8     s = (s * 45) % a;
     9     s = (s * 18 + 1) % a;
    10     a = a - s;
    11     printf("%I64d %I64d
    ",1 + a,p + a);
    12 }
    13 int main(){
    14     solve();
    15     return 0;
    16 }

    D题:@狗哥有个好想法;

    假如B>A;

    那么对于一个数组最小的数X,如果能在B-X=PB找到他的匹配,那么不用再A中找到,

    原因是假如X“嫁"给了A,在A中会有一个A-X=YA与之搭配。

    但是PB就找不到”老婆“了,因为A-X<B-X,但是X已经是最小的,所以PB就无法对应了,

    然后就是写法的问题了;

     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<cmath>
     4 #include<cstring>
     5 #include<algorithm>
     6 #include<iostream>
     7 #include<map>
     8 #include<string>
     9 typedef long long ll;
    10 using namespace std;
    11 int ans[123456];
    12 map<int,int>mp;
    13 
    14 int n,a,b;
    15 int pa,pb;
    16 
    17 int main()
    18 {
    19     cin>>n>>a>>b;
    20     for (int i=1;i<=n;i++)
    21     {
    22         int x;
    23         cin>>x;
    24         mp[x]=i;
    25     }
    26     int pa=1,pb=2;
    27     if (a>b) swap(a,b),swap(pa,pb);
    28 
    29     for (map<int,int>::iterator mi=mp.begin();mi!=mp.end();mi++)
    30     {
    31         int val=mi->first;
    32         int pos=mi->second;
    33         if (ans[pos]) continue;
    34         if (mp.find(b-val)!=mp.end()&&ans[mp[b-val]]!=pa)
    35             ans[pos]=ans[mp[b-val]]=pb;
    36         else if (mp.find(a-val)!=mp.end()&&ans[mp[a-val]]!=pb)
    37             ans[pos]=ans[mp[a-val]]=pa;
    38         else
    39         {
    40             cout<<"NO"<<endl;
    41             return 0;
    42         }
    43     }
    44     cout<<"YES"<<endl;
    45     for (int i=1;i<=n;i++) cout<<ans[i]-1<<" ";
    46     return 0;
    47 }

    C:我分奇数偶数;

    因为1*2*3*4=24;

    6-5=1;

    8-7=1;

    10-9=1;

    发现了什么,

    奇数也可以类推;

    1,2,3,4,5手动找一下;

    7-6=1;

    9-8=1;

    然后就可以了

    B,A基本照着模拟就可以了

  • 相关阅读:
    汉字转拼音的Java类库——JPinyin
    更改MySQL数据库的编码为utf8mb4
    mysql 添加列,修改列,删除列
    mysql解决datetime与timestamp精确到毫秒的问题
    mysql之数据库备份与恢复
    linux常用命令集锦
    如何更改linux文件目录拥有者及用户组
    linux 查找文件命令
    关于servlet中重定向、转发的地址问题
    jQuery的validation插件(验证表单插件)
  • 原文地址:https://www.cnblogs.com/forgot93/p/3987187.html
Copyright © 2011-2022 走看看