比赛链接

A题是KMP,先把A拼接到B的后面,然后利用next数组的意义(包括其具体含义,以及失配时的应用),得到ans

 #include<bits/stdc++.h>
using namespace std; char T[],S[];
int tlen,slen;
int Next[]; void getNext()
{
int j=,k=-;
Next[]=-;
while(j<tlen)
if(k==-||T[j]==T[k])
Next[++j]=++k;
else
k=Next[k];
} int cal(int x)
{
int ret=;
while(Next[x]!=-)
{
x=Next[x];
ret++;
}
return ret;
} int main()
{
//freopen("test.txt","r",stdin);
int TT;scanf("%d",&TT);
while(TT--)
{
scanf("%s%s",S,T);
int x=min(strlen(S),strlen(T));
strcat(T,S);
tlen=strlen(T);
getNext();
int len=min(Next[tlen],x);
int t=cal(len);
printf("%d\n",t); }
}

A

B算是数学题吧,对于同一个数,如果是整数,怎样操作都不会对difference有影响,而取ceil和取floor则恰好使difference差1,想明白这点就好了

代码自己没写,贴个链接。。 http://blog.csdn.net/mz839555819/article/details/47844275

D是DP,转移方程见代码

假设:当i'<i时,dp[i']都是确定好的最小的消耗值
.当i为偶数时,dp[i]可能来自三个方向:i-,i+,i/。若来自i+,则i+1必然来自i+,下面比较来自i+2和来自i/2的两种情况。
dp[i]<-dp[i+]+2x<-dp[(i+)/]+y+2x<-(dp[i/]-x,dp[i/]+x)+y+2x ;
dp[i]<-dp[i/]+y
显然后者得到的dp[i]更小,故i为偶数情况下,只可能从两个方向转移过来
.当i为奇数时,dp[i]可能来自两个个方向:i-,i+。而i-,i+1都是偶数,这样借用上面的偶数情况下的结论就可以了,即dp[i+]只能由自己或是dp[(i+)/]转移过来。其中由dp[i]转移的情况推给dp[i-]就好了 转移方程如下
  if(i&1) dp[i]=min(dp[i-1]+x,dp[(i+1)/2]+x+y)
  else dp[i]=min(dp[i-1]+x,dp[i/2]+y)
//最后,哪里有问题的话,欢迎提出来~
 #include<bits/stdc++.h>
using namespace std;
typedef long long LL; LL n,x,y,ans;
LL dp[]; int main()
{
//freopen("test.txt","r",stdin);
while(cin>>n>>x>>y)
{
memset(dp,0x3f3f3f3f,sizeof(dp));
ans=;
dp[]=x;dp[]=;
for(int i=;i<=n+;i++)
{
if(i&)
dp[i]=min(dp[i-]+x,dp[(i+)/]+x+y);
else
dp[i]=min(dp[i-]+x,dp[i/]+y);
}
cout<<dp[n]<<endl;
}
}

D

G题并查集,不同节点构成连通分量数 在这里等于 不同质因子的构成连通分量数。

具体一些细节: 1是特例; 只有质因子存在于图中时才要考虑该质因子

p.s. 分解质因数,素数筛 心里存个固定的板子真心好~

 #include<bits/stdc++.h>
using namespace std;
typedef long long LL; const int N=1e6+;
int not_prime[N+];
vector<int> prime;
bool vis[N+]; //图中存在label,使i是label的质因数
bool done[N+]; //这一连通分量是否已被计数
int p[N+];
int T,kase; int Find(int x)
{
return x==p[x]? x:p[x]=Find(p[x]);
}
void Union(int x,int y)
{
x=Find(x),y=Find(y);
p[x]=y;
} void init()
{
for(int i=;i<=N;i++)
{
if(!not_prime[i])
{
//printf("%d=====\n",i);
prime.push_back(i);
for(LL j=(LL)i*i;j<=N;j+=i)
not_prime[j]=true;
}
}
}
int init1()
{
for(int i=;i<=N;i++)
p[i]=i;
memset(vis,false,sizeof(vis));
memset(done,false,sizeof(done));
} void getFactors(int x)
{
vector<int> a;
for(int i=;prime[i]*prime[i]<=x;i++)
{
if(x%prime[i]==)
{
a.push_back(prime[i]),vis[prime[i]]=true;
while(x%prime[i]==) x/=prime[i];
}
}
if(x>) a.push_back(x),vis[x]=true;
for(int i=;i<a.size();i++)
Union(a[],a[i]);
} int solve()
{
int ret=;
for(int i=;i<prime.size();i++)
{
if(vis[prime[i]])
{
int t=Find(prime[i]);
if(!done[t])
{
ret++;
//printf("===%d====",t);
done[t]=true;
}
}
}
return ret;
} int main()
{
init();
//freopen("test.txt","r",stdin);
scanf("%d",&T);
while(T--)
{
init1();
int ans=;
int n;
scanf("%d",&n);
for(int i=;i<n;i++)
{
int t;
scanf("%d",&t);
if(t==)
{
ans++;
continue;
}
getFactors(t);
}
ans+=solve();
printf("Case %d: %d\n",++kase,ans);
}
}

G

中国(北方)大学生程序设计训练赛(第二周) (A B D G)的更多相关文章

  1. 中国(北方)大学生程序设计训练赛(第一周) (D E)

    比赛链接 D题是个二分,每次check复杂度为O(n),类似于xdu_1068,只是一个是求积,一个是求商 #include<bits/stdc++.h> using namespace ...

  2. Contest1592 - 2018-2019赛季多校联合新生训练赛第二场(部分题解)

    Contest1592 - 2018-2019赛季多校联合新生训练赛第二场 D 10248 修建高楼(模拟优化) H 10252 组装玩具(贪心+二分) D 传送门 题干 题目描述 C 市有一条东西走 ...

  3. 《JAVA程序设计》_第二周学习总结

    20175217吴一凡 一.IDEA的安装和使用 参考老师的教程Intellj IDEA 简易教程. 1.IDEA的安装 因为我已经习惯了在Linux上敲代码,所以我决定将IDEA安装在虚拟机上. 首 ...

  4. 杨其菊201771010134《面向对象程序设计Java》第二周学习总结

    第三章 Java基本程序设计结构 第一部分:(理论知识部分) 本章主要学习:基本内容:数据类型:变量:运算符:类型转换,字符串,输入输出,控制流程,大数值以及数组. 1.基本概念: 1)标识符:由字母 ...

  5. 201777010217-金云馨《面向对象程序设计(Java)》第二周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  6. 201871010115——马北《面向对象程序设计JAVA》第二周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  7. 201871010132——张潇潇《面向对象程序设计JAVA》第二周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  8. 网易云课堂_C语言程序设计进阶_第二周:指针:取地址运算和指针、使用指针、指针与数组、指针与函数、指针与const、指针运算、动态内存分配_2信号报告

    2 信号报告(5分) 题目内容: 无线电台的RS制信号报告是由三两个部分组成的: R(Readability) 信号可辨度即清晰度. S(Strength)    信号强度即大小. 其中R位于报告第一 ...

  9. 面向对象程序设计--Java语言第二周编程题:有秒计时的数字时钟

    有秒计时的数字时钟 题目内容: 这一周的编程题是需要你在课程所给的时钟程序的基础上修改而成.但是我们并不直接给你时钟程序的代码,请根据视频自己输入时钟程序的Display和Clock类的代码,然后来做 ...

随机推荐

  1. FTP主动模式和被动模式的区别

    基础知识: FTP只通过TCP连接,没有用于FTP的UDP组件.FTP不同于其他服务的是它使用了两个端口, 一个数据端口和一个命令端口(或称为控制端口).通常21端口是命令端口,20端口是数据端口.当 ...

  2. Android Studio的两种模式及签名配置

    我们使用Android Studio 运行我们的app,无非两种模式:debug和release模式. debug模式 debug模式使用一个默认的debug.keystore进行签名. 这个默认签名 ...

  3. redis五种数据类型

    string Redis的字符串和其他编程语言或者其他键值存储提供的字符串非常相似. 命令 行为 GET 获取存储在给定键中的值 SET 设置存储在给定键中的值 DEL 删除存储在给定中的值(这个命令 ...

  4. Ubuntu下解决解压zip文件中文文件名乱码问题

    在Ubuntu下解压Windows下压缩的zip文件时,会出现解压出的带中文文件名的文件名乱码,这是因为Ubuntu和Windows默认的编码不同,Ubuntu下默认的编码是UTF-8,而Window ...

  5. java web项目中 读取properties 路径的问题

    可以先获取项目的classPath String classPath = this.getClass().getResource("/").getPath();//获取classP ...

  6. java编码详解

    举个例子 我们在开发过程中,特别是多种编码格式并存的情况下,很容易遇到乱码问题. 假如有一个GBK编码java文件,然后再使用-Dfile.encoding=GBK参数,写入的文件中哪些是乱码呢.那如 ...

  7. Could not open input file: composer.phar

    Yii 2官网推荐用Composer安装框架,但是在本地出错:Could not open input file: composer.phar.后来修改了命令行就ok了,难道是我装的Composer跟 ...

  8. mysql CMD命令

    1.连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root ...

  9. docker - 启动container时出现 [warning] : ipv4 forwarding is disabled. networking will not work

    起因 今天在一台新的centos宿主机上安装docker,由于关闭了iptables,在此之后启动container的时候会出现警告: WARNING: IPv4 forwarding is disa ...

  10. jquery取出所有包含class='engineer_val'的值

    $(".engineer_val").each(function(){ //jquery取出所有包含class='engineer_val'的值 $(); });