精华内容
下载资源
问答
  • 御坂妹妹

    2017-10-28 20:38:48
    现在已知有 aa 个御坂妹妹只爱吃素菜,有 bb 个御坂妹妹只吃荤菜,还有 cc 个御坂妹妹二者都能接受,上条当麻要为她们买晚饭。 商店共提供 mm 种菜,并且规定每种菜只能买一次。 每一种菜有一个价格 c_ic i ​ ...
    #include<bits/stdc++.h>
    #define N 100010
    using namespace std;
    struct Node
    {
        int val,kind;
        bool operator <(const Node &x)const{return val<x.val;}
    }s[5*N];
    int a,b,c,n;
    int main()
    {
        scanf("%d%d%d",&a,&b,&c);scanf("%d",&n);
        for(int i=1;i<=n;i++)
    {
    int q;
            char ss[20];scanf("%d%s",&s[i].val,ss);//puts(ss);
            if(ss[0]=='A')s[i].kind=1;else s[i].kind=2;
        }
        sort(s+1,s+n+1);long long ans=0,tot=0;
        for(int i=1;i<=n;i++)
    {
            int kind=s[i].kind;bool cc=true;
            if(kind==1&&a)ans+=s[i].val,a--,cc=false,tot++;
            if(kind==2&&b)ans+=s[i].val,b--,cc=false,tot++;
            if(c&&cc)ans+=s[i].val,c--,tot++;
        } 
        cout<<tot<<" "<<ans<<endl;
        return 0; 
    展开全文
  • 御坂御坂 题目如下: 由提示可定义函数f(x): f(1)=0 当x>1时有 f(x)=(f(x-1)+3)mod x 这个函数的意思是,f(x)是x个人的时候最后一个剩下的妹妹的编号 f(x+1)的时候是第0个人先出局了,这样子就只剩下...

    御坂御坂

    题目如下:

     

    由提示可定义函数f(x):

    f(1)=0

    当x>1时有

    f(x)=(f(x-1)+3)mod x

    这个函数的意思是,f(x)是x个人的时候最后一个剩下的妹妹的编号

    f(x+1)的时候是第0个人先出局了,这样子就只剩下了x个妹妹,然后第3个人就变成了f(x)的第一个出局的人,剩余人数也是x个人,那么把御坂妹妹的编号转换一下就是f(x+1)的游戏结果。

    所以得出公式f(x)=(f(x-1)+3)mod x

    关于这个公式我们打个表不难发现,这个公式是分段线性递增的,又因为mod每次+1而f(x)是每次+3,所以每隔x/2次增长后,f(x)会被mod减小一次,所以每经过x*3/2后,f(x)会被清零一次

    就是说分段的时候x每次会增加x/2,也就是x=(3/2)*x

    也就是说x是指数级递增的。

    所以你可以求f是哪一段的,又因为是线性函数,所以可以直接求值。我们就能在log(n)的复杂度得到f(x)的值

    然后这题的答案就是暴力跑m次f(x)来求答案,但是在log(m)次之内中一定会变成f(x)+1=f(f(x)+1)的情况,就可以直接跳出得到答案了

    这题的做法

    1、 O(log(n)*log(m))

    log(n)的复杂度求f(n),log(m)次递归求解。

    log(n)求f(n)的做法(1)

     1 #include<math.h>
     2 #include<stdio.h>
     3 #include<string.h>
     4 #include<stdlib.h>
     5 #include<algorithm>
     6 using namespace std;
     7 typedef long long ll;
     8 /*f[1]=0;
     9 f[n]=(f[n-1]+3)%n
    10 c[n]=c[f[n]+1]*/
    11 ll f(ll n)
    12 {
    13     ll ans=0,m=1;
    14     while(m<n)
    15     {
    16         ll res=m-ans;
    17         ll add=res/2+(res%2);
    18         if(m+add>n)break;
    19         m+=add;
    20         ans=ans+add*3-m;
    21     }
    22     return (ans+(n-m)*3)%n;
    23 }
    24 ll c(ll n,ll m,ll pre)
    25 {
    26     if(pre==n)return pre;
    27     if(m==0)return n;
    28     return c(f(n)+1,m-1,n);
    29 }
    30 int main()
    31 {
    32     ll t;
    33     scanf("%lld",&t);
    34     while(t--)
    35     {
    36         ll n,m;
    37         scanf("%lld%lld",&n,&m);
    38         printf("%lld\n",c(n,m,n+1));
    39     }
    40     return 0;
    41 }
    View Code

    log(n)求f(n)的做法(2)::这个方法的原理请参考:https://www.cnblogs.com/weidiao/p/5966204.html(这个效率比上面的低一些,因为是递归所以比较慢,(1)和(2)只不过一个是正着推一个是反着推)

     1 #include<math.h>
     2 #include<stdio.h>
     3 #include<string.h>
     4 #include<stdlib.h>
     5 #include<algorithm>
     6 using namespace std;
     7 typedef long long ll;
     8 /*f[1]=0;
     9 f[n]=(f[n-1]+3)%n
    10 c[n]=c[f[n]+1]*/
    11 ll f(ll n)
    12 {
    13     if(n==1)return 0;
    14     if(n==2)return 1;
    15     ll temp=f(n-n/3);
    16     return (temp+((temp-n%3)<0?0:(temp-n%3))/2+n-n%3)%n;
    17 }
    18 ll c(ll n,ll m,ll pre)
    19 {
    20     if(pre==n)return pre;
    21     if(m==0)return n;
    22     return c(f(n)+1,m-1,n);
    23 }
    24 int main()
    25 {
    26     ll t;
    27     scanf("%lld",&t);
    28     while(t--)
    29     {
    30         ll n,m;
    31         scanf("%lld%lld",&n,&m);
    32         printf("%lld\n",c(n,m,n+1));
    33     }
    34     return 0;
    35 }
    View Code

     

    2、O(log(log(n))*log(m)

    对f(n)进行打表,预处理出来一个分段的表,然后在表上进行二分求f(n),这样子求f(n)就变成了log(log(n))的复杂度。所以时间复杂度为log(log(n))*log(m)

    打表代码如下:

     1 void db()
     2 {
     3     ll x=1;
     4     ll f=0;
     5     while(x<=(ll)1e18)
     6     {
     7         printf("%lld %lld\n",x,f);
     8         ll res=x-f;
     9         ll add=(res+1)/2;
    10         x+=add;
    11         f=f+add*3-x;
    12     }
    13 }
    View Code

     ac代码如下:

     1 #include<math.h>
     2 #include<stdio.h>
     3 #include<string.h>
     4 #include<stdlib.h>
     5 #include<algorithm>
     6 using namespace std;
     7 typedef long long ll;
     8 /*f[1]=0;
     9 f[n]=(f[n-1]+3)%n
    10 c[n]=c[f[n]+1]*/
    11 ll fj[]={1ll,2ll,3ll,4ll,6ll,9ll,14ll,21ll,31ll,47ll,70ll,105ll,158ll,237ll,355ll,533ll,799ll,1199ll,1798ll,2697ll,4046ll,6069ll,9103ll,13655ll,20482ll,30723ll,46085ll,69127ll,103691ll,155536ll,233304ll,349956ll,524934ll,787401ll,1181102ll,1771653ll,2657479ll,3986219ll,5979328ll,8968992ll,13453488ll,20180232ll,30270348ll,45405522ll,68108283ll,102162425ll,153243637ll,229865456ll,344798184ll,517197276ll,775795914ll,1163693871ll,1745540806ll,2618311209ll,3927466814ll,5891200221ll,8836800331ll,13255200497ll,19882800745ll,29824201118ll,44736301677ll,67104452515ll,100656678773ll,150985018159ll,226477527239ll,339716290858ll,509574436287ll,764361654431ll,1146542481646ll,1719813722469ll,2579720583704ll,3869580875556ll,5804371313334ll,8706556970001ll,13059835455001ll,19589753182502ll,29384629773753ll,44076944660629ll,66115416990944ll,99173125486416ll,148759688229624ll,223139532344436ll,334709298516654ll,502063947774981ll,753095921662471ll,1129643882493707ll,1694465823740560ll,2541698735610840ll,3812548103416260ll,5718822155124390ll,8578233232686585ll,12867349849029878ll,19301024773544817ll,28951537160317225ll,43427305740475838ll,65140958610713757ll,97711437916070635ll,146567156874105953ll,219850735311158929ll,329776102966738394ll,494664154450107591ll,741996231675161386ll};
    12 ll as[]={0,1,1,0,0,0,1,1,0,1,0,0,1,1,0,1,0,1,0,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,0,1,1,0,1,0,1,0,0,1,0,0,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,1,0,1,0,1,1,0};
    13 const int xn=102;
    14 ll f(ll n)
    15 {
    16     int l=-1,r=xn;
    17     while(l+1<r)
    18     {
    19         int mid=(l+r)/2;
    20         if(fj[mid]>n)
    21             r=mid;
    22         else l=mid;
    23     }
    24     return as[l]+(n-fj[l])*3;
    25 }
    26 ll c(ll n,ll m,ll pre)
    27 {
    28     if(pre==n)return pre;
    29     if(m==0)return n;
    30     return c(f(n)+1,m-1,n);
    31 }
    32 void db()
    33 {
    34     ll x=1;
    35     ll f=0;
    36     while(x<=(ll)1e18)
    37     {
    38         printf("%lld %lld\n",x,f);
    39         ll res=x-f;
    40         ll add=(res+1)/2;
    41         x+=add;
    42         f=f+add*3-x;
    43     }
    44 }
    45 int main()
    46 {
    47     ll t;
    48     scanf("%lld",&t);
    49     while(t--)
    50     {
    51         ll n,m;
    52         scanf("%lld%lld",&n,&m);
    53         printf("%lld\n",c(n,m,n+1));
    54     }
    55     return 0;
    56 }
    View Code

     

    转载于:https://www.cnblogs.com/xseventh/p/8547139.html

    展开全文
  • 题目 BUAAOJ989 参考 以下内容来自糖老师 令f(n)f(n)f(n)表示考虑只剩nnn个人时的队伍序列,这里把下一个要处决的人放在第一个位置,他被标号成000,然后其他人按顺序依次标号111到(n−1)(n-1)(n−1),在这种...

    题目

    BUAAOJ989

    参考

    代码

    typedef long long ll;
    typedef double db;
    typedef pair<int, int> pll;
    
    const int maxn = (int) 1e7 + 9;
    const int M = 30;
    const ll mod = 1000000007;
    const ll mx = (ll) 1e18 + 9;
    ll f[maxn];
    ll a[maxn];
    ll tot;
    
    void init() {
        ll fn = 0;
        ll nn = 1;
        while (nn < mx) {
            while (fn + 3 < nn) {
                ll tmp = (nn - 1 - fn) / 3;
                if (tmp + nn >= mx) {
                    tmp = (mx - nn - 1) / 3;
                    nn += tmp;
                    fn += tmp * 3;
                    break;
                }
                nn += tmp;
                fn += tmp * 3;
            }
            f[tot] = fn;
            a[tot] = nn;
            tot++;
            nn++;
            fn = (fn + 3) % nn;
        }
    }
    
    int main() {
        int t;
        init();
        scanf("%d", &t);
        while (t--) {
            ll n, m;
            scanf("%lld%lld", &n, &m);
            ll tmp, x, fn, nn;
            x = lower_bound(a, a + tot, n) - a;
            while (m--) {
                fn = f[x];
                nn = a[x];
                tmp = fn - (nn - n) * 3;
                if (tmp + 1 == n) {
                    break;
                } else {
                    n = tmp + 1;
                }
                while (a[x - 1] >= n) {
                    x--;
                }
            }
            printf("%lld\n", n);
        }
        return 0;
    }
    
    展开全文
  • MisakaHookFinder:御坂Hook提取工具—Galgame文字游戏文本钩子提取
  • 御坂翻译器—Galgame/文字游戏/漫画多语种实时机翻工具 MisakaTranslator 御坂翻译器 Galgame/文字游戏/漫画多语种实时机翻工具 开源 | 高效 | 易用 中文 • English MisakaTranslator的名字由来是因为本软件...
  • 御坂网络 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format: %lld 题解:暴力!暴力出奇迹,分别以每一个顶点作为圆心,看剩下的圆心之间的距离是否相同。...

     链接:https://ac.nowcoder.com/acm/contest/212/A
    来源:牛客网
     

    御坂网络

    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 131072K,其他语言262144K
    64bit IO Format: %lld

    题解:暴力!暴力出奇迹,分别以每一个顶点作为圆心,看剩下的圆心之间的距离是否相同。qwq

    题目描述

    作为「Misaka Network」的中心司令塔的 LastOrder出事了,为了维持 「Misaka Network」的正常工作,需要临时选出一个Sister作为中心司令塔。

     

    为了弥补能力上的不足,对于选出的Sister有一些要求。
    具体来说,平面上有 n 个 Sister,问能否找到一个Sister作为中心司令塔,使得其他 Sister 都在以她为圆心的一个圆上,如果找不到这样的Sister,则输出 "-1"(不含引号)。

    输入描述:

    第一行一个数 n
    接下来 n 行,第 i 行两个整数 xi, yi ,表示第 i 个Sister在平面上的坐标。

    输出描述:

    输出共一个数,表示选出的Sister的编号,如果找不到则输出 "-1"。

    示例1

    输入

    复制

    3
    1 1
    0 1
    1 2

    输出

    复制

    1

    备注:

    3 ≤ n ≤ 1000,-109≤ xi, yi ≤ 109 ,所有坐标互不相同。
    #include <iostream>
    using namespace std;
    typedef long long ll;
    const int maxn=1e4+5;
    ll a[maxn],b[maxn];
    ll d[maxn];
    int main(){
        ll n;
        cin>>n;
        for(ll i=1;i<=n;i++){
            cin>>a[i]>>b[i];
        }
        for(ll i=1;i<=n;i++){
            ll num=0;
            for(ll j=1;j<=n;j++){
                if(i!=j)
                    d[++num]=(a[i]-a[j])*(a[i]-a[j])+(b[i]-b[j])*(b[i]-b[j]);
            }
            ll flag=1;
            for(ll j=1;j<num;j++){
                if(d[j]!=d[j+1]) flag=0;
                if(flag){
                    cout<<i;
                    return 0;
                }
            }
        }
        cout<<"-1";
        return 0;
    }

     

    转载于:https://www.cnblogs.com/UUUUh/p/10284060.html

    展开全文
  • MisakaTranslator御坂翻译器 Galgame /文字游戏/漫画多语种实时机翻工具开源|高效|易用 • MisakaTranslator的名字由来是因为本软件连接到一堆万多名御坂妹妹所组成的『御坂网络』,利用其强大的计算能力来提供...
  • 御坂网络

    千次阅读 2018-10-13 08:21:30
    时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format: %lld 题目描述 作为「Misaka Network」的中心司令塔的 LastOrder出事了,为了维持 「Misaka Network」的正常工作...
  • 御坂网络(枚举基准,二分图) 现在有n个A点,m个B点(n,m<=200),和最大半径rmax。可以选定一个半径r<rmax,以r为半径,A点或B点为圆心,同时保证A点构造出的圆和B点构造出的圆不相交。问最大面积和。 ...
  • 目录 0、声明: 1、F12掘金 0、声明: 文章内涉及到的所有信息均为公开信息,所有Bilibili用户都...切换到用户搜索,搜索“御坂10032”为示例,会发现——太多了根本搞不来.......去XHR里面偷懒逐个查找依然找不...
  • soj115 御坂网络

    2019-10-08 06:24:14
    题意:平面上有n个A发射点和m个B发射点,可以选择安置相应A/B装置,装置范围是圆,自取半径(要求都相同且<=Rmax)。异种要求范围不相交。求装置范围之和(不是并!)。 标程: ... 4 const int in...
  • 关于指针的练习 1.用指针编写一个对整型数组进行冒泡排序函数。冒泡排序是指将相邻的元素进行比较,如果不符合所 要求的顺序,则交换这两个元素;对整个数列中所有的元素反复运用上法,直到所有的元素都排好序为止...
  • extern 变量;可以使用在变量定义之前,告诉编译器这个变量在后面被定义过了,不会报错。,此外如果变量定义在其他文件中,也可以用extern。在extern 定义的变量前加static 会使其变为internal类型而且改变后无法变...
  • 本文为我的C++学习笔记,欢迎大佬们点评指正,由于基本语法已经熟悉,所以虽然是第一篇,仍然是从指针开始。 定义一个整数类型的指针变量int *p; 指针变量指向一个地址int arr[10];//定义一个数组 ...
  • c++读写文件 读写文件所需要的准备: 1.头文件fstream. 2.用ifstream/ofstream声明一个对象 ifstream inFile; //ifstream是用来进行读的类 ofstream outFile; // ofstream是用来进行写的类 ...3.using namespace std...
  • 递归实现汉诺塔 代码其实很简单,当初看完别人的代码后有一部分不能理解 大概是这样 ...... hannoi(3,'x','y','z'); //然后我认为的运行过程 hannoi(2,x,z,y) hannoi(1,x,z,y) ...在hannoi(1,x,z,y)中z是y也就是...
  • 依然是递归,此次是快排算法 #include using namespace std; void quick_sort(int arr[],int left,int right) { if(left ) ... int i = left,j = right,poi = arr[left];//以arr[]={0,1,2,3,4,5,6,7,8,9}为例,i
  • 1、展示 因为最近刚巧刚刚开始接触PHP,所以直接就改用PHP来做了,懒得再用Django做接口了。... 1、基本页面 去Bootstrap官网找到了一个缩略图用于展示,选了几条信息尝试,发现效果不错,嗯就这么做下去吧 ......
  • 到 20001号 -> Last order) for cnt in range(0, 20002): print("Searching ", cnt) # 根据循环次数来更新本次搜索的是御坂xx号 query["keyword"] = "御坂" + str(cnt) # 先进行一次接口访问,获取结果的总页数用于...
  • emmm 代码敲好 以上。 #include&amp;amp;amp;amp;lt;cstdio&amp;amp;amp;amp;gt; #include&amp;amp;amp;amp;lt;iostream&amp;amp;amp;amp;gt; #include&amp;...cstdlib&
  • 话不多说,上代码#include using namespace std; int sum(int n, ...)//...表示参数数目不确定 { int i , sum = 0; va_list vap;//定义一个参数列表 va_start(vap,n);//初始化这个列表 for(i = 0;... {
  • HookFinder不能和御坂翻译器一起使用,否则会导致一方读不出文本,应该先关闭其中一个软件再使用另一个,HookFinder查找到可用文本后,特殊码经过变形填写到翻译器中使用,如果还是不行直接用剪贴板方式读取) 如果...
  • 御坂和她的n-1个克隆姐姐(编号1~n-1)构成一张御坂网络,如果第x号"姐姐"和第y号"姐姐"有条x到y的有向边,则说明x可以将信息传给y,已知御坂妹妹作为n号点,是所有信息的源头,如果屏蔽掉x点之后y点无法得到御坂...
  • 御坂 我们正在为您的 Web 应用程序项目创建一个新的可靠起点,但这只是开始,请勿在生产中使用此代码;)
  • 目录catalog注释梦人亦冷陈小楞匿名用户海洋唐老鸭御坂初琴夜望繁星阿哲专属天行健leo匿名用户垂钓者dodolangkdurant匿名用户Shawn Tsien时宜山高水长EmbeddedOsprey 注释 斜体是获取的信息,黑体是自己的疑问,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,325
精华内容 1,330
关键字:

御坂