比赛链接

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. apache和nginx支持SSI配置

    今天发现了一种新的语言格式:.shtml 一. 前言 SSI是一种类似于ASP的基于服务器的网页制作技术.将内容发送到浏览器之前,可以使用"服务器端包含 (SSI)"指令将文本.图 ...

  2. 用java来实现验证码功能。

    昨天在网上看到了一篇关于验证码的文章,很不错,但是有些不尽人意的地方,比如没有考虑到前端传过来的验证码如果是小写的话,那么做验证的时候就会出现错误, 因为java是严格区分大小写的,还有就是验证码会重 ...

  3. Mac下将ISO写入U盘镜像

    在Mac下面如果想做一个启动U盘,确实不如windows下那么方便,Windows下面有ultraiso+王涛,Mac下面测可以用下面的办法. 打开磁盘工具 插入U盘,并在磁盘工具里面找到U盘,把它卸 ...

  4. javascript中的window.open()被浏览器拦截

    最近做项目的时候,点击事件的时候遇到了window .open()被浏览器拦截的情况,虽然在自己的开发环境中都能正常使用,但是放在测试环境中window.open()就是不能使用, 后来经过测试,单纯 ...

  5. Ubuntu下的iptux和Windows下的飞秋互传文件

    1.问题 当Linux下的iptux是安装源里的版本时,存在下面的问题:Windows下的飞秋可以向Linux下的iptux发送文件,iptux接受正常Linux下的iputx给Windows下的飞秋 ...

  6. java IO文件操作简单基础入门例子,IO流其实没那么难

    IO是JAVASE中非常重要的一块,是面向对象的完美体现,深入学习IO,你将可以领略到很多面向对象的思想.今天整理了一份适合初学者学习的简单例子,让大家可以更深刻的理解IO流的具体操作. 1.文件拷贝 ...

  7. memcache常用命令

    一.memcached的基本命令(安装.卸载.启动.配置相关): -p 监听的端口 -l  连接的IP地址, 默认是本机   -d start 启动memcached服务 -d restart 重起m ...

  8. 类型转换之 PropertyEditorSupport类

    这个类可以用于自定义的类型转换, 子类继承这个类之后可以重写子类的方法 ,其中比较重要的是setAsText和setValue方法,setAsText 子自己的方式处理转换,setValue将转换的结 ...

  9. JAVA反射原理

    什么是反射? 反射,一种计算机处理方式.是程序可以访问.检测和修改它本身状态或行为的一种能力.java反射使得我们可以在程序运行时动态加载一个类,动态获取类的基本信息和定义的方法,构造函数,域等.除了 ...

  10. 详解 RAC 中各种IP和监听的意义

    一.SCAN 概念 SCAN(Single Client Access Name)是 Oracle从11g R2开始推出的,客户端可以通过 SCAN 特性负载均衡地连接到 RAC数据库 SCAN 最明 ...