Codeforces Round #151 (Div. 2卡塔尔(قطر‎笔记

作者:操作系统

有N个数,从N个数里取M个数,使得抽取的M(1=M=N卡塔尔个数和为SUM,并出口对应的索引如N=十四个数8,9,3,1,6,18,5,3,15,99,9,18,1000,15,500SUM=15那儿出口M=18,13M=21-4,4-10M=30-3-4有何人风野趣落成这些功效,用C语言,不含有容器的函数.

  给N个互不相通的数字,要组成M(M<=N*(N 1State of Qatar/2State of Qatar种分歧的SUM,必要输出种种组成的方法.

  第一代生物通过繁衍和多变获得11个后代(繁殖和变异的比例自定)。那样一同有19个生物。然后那二十个生物利用成为王败为寇的情势,保留19个V最大的古生物,淘汰11个生物。那叫做自然选拔的一世。

Sample Input

5 5
1 3

操作系统 1操作系统 2操作系统,View Code

  笔者在那个时候提二个算法的思路,不是最优的,首要是上课那一个算法的。

GCD SUM

Time Limit: 8000/4000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others)

SubmitStatus

几眼下应当算第三回开头做CF,把及时没搞出来的主题素材总计一下啊

  养殖性:生物S1(N1,M1)和生物S2(N2,M2)繁殖的子孙为生物S3(N1,M2)和生物S4(N2,M1)

Output

如题所汇报,每行输出3个数,ans,ansx,ansy,空格隔开分离

题意:

  标题汇报:有31,-41,59,26,-53,58,97,-93,-23,84十三个数。SUM(N,M)表示从第N个数到到第M个数的和。举个例子:SUM(2,3)=-41 59=18。问:最大的和是多少?对应的N和M是不怎么?

Input

多组数据,每行八个数N,M(1 <= N,M <= 100000卡塔尔国。

 

题意:

  模拟生物算法(感激装配脑袋指正,这应该是遗传算法)。

Sample Output

19 55 55
3 3 6

操作系统 3操作系统 4

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 using namespace std;
 5 #define MAX 100010
 6 #define ll long long
 7 ll mu[MAX]= {0},mb[MAX]= {0};
 8 void init()
 9 {
10     int i,j;
11     for(i=2; i<MAX; i  )
12     {
13         if(!mu[i])
14         {
15             mu[i]=i;
16             if(i>1000)continue;
17             j=i*i;
18             while(j<MAX)
19             {
20                 mu[j]=i;
21                 j =i;
22             }
23         }
24     }
25     mu[1]=1;
26     for(i=2; i<MAX; i  )
27     {
28         if((i/mu[i])%mu[i]==0)mu[i]=0;
29         else mu[i]=-mu[i/mu[i]];
30     }
31     for(i=1; i<MAX; i  )
32     mb[i]=mu[i]*i,mu[i] =mu[i-1],mb[i] =mb[i-1];
33 }
34 void solve(int n,int m)
35 {
36     ll ans,ansx,ansy,x,y;
37     ans=ansx=ansy=0;
38     int i,j,k;
39     for(i=(n>m?m:n);i>0;)
40     {
41         x=n/i,y=m/i;
42         k=max(n/(x 1),m/(y 1));
43         ans =x*y*(mu[i]-mu[k]);
44         ansx =(mb[i]-mb[k])*y*(1 x)*x/2;
45         ansy =(mb[i]-mb[k])*x*(1 y)*y/2;
46         i=k;
47     }
48     printf("%lld %lld %lldn",ans,ansx,ansy);
49 }
50 int main()
51 {
52     init();
53     int n,m;
54     while(scanf("%d%d",&n,&m)!=EOF)
55     {
56         solve(n,m);
57     }
58 }

View Code

 

  给您N个点和M条边,每一个点有三个颜料,每一个颜色的价值=与那一个颜色的点相近的例外颜色的个数.

  依照标题,结构生物S,生物S有八个属性N、M、V。N表示领头的下标,M表示截止的下标,和难点中的定义相像。V表示从第N个数到第M个数的和,V和N、M是相关的。因而,能够用S(N,M)表示那几个生物。

Problem Description

给出N,M
实行如下程序:
long long  ans = 0,ansx = 0,ansy = 0;
for(int i = 1; i <= N; i )
   for(int j = 1; j <= M; j )
       if(gcd(i,j) == 1) ans ,ansx = i,ansy = j;
cout << ans << " " << ansx << " " << ansy << endl;

本文由ca88发布,转载请注明来源

关键词: 数论 算法 函数 不带 容器