中国(北方)大学生程序设计训练赛(第二周) (A B D G)
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)的更多相关文章
- 中国(北方)大学生程序设计训练赛(第一周) (D E)
比赛链接 D题是个二分,每次check复杂度为O(n),类似于xdu_1068,只是一个是求积,一个是求商 #include<bits/stdc++.h> using namespace ...
- Contest1592 - 2018-2019赛季多校联合新生训练赛第二场(部分题解)
Contest1592 - 2018-2019赛季多校联合新生训练赛第二场 D 10248 修建高楼(模拟优化) H 10252 组装玩具(贪心+二分) D 传送门 题干 题目描述 C 市有一条东西走 ...
- 《JAVA程序设计》_第二周学习总结
20175217吴一凡 一.IDEA的安装和使用 参考老师的教程Intellj IDEA 简易教程. 1.IDEA的安装 因为我已经习惯了在Linux上敲代码,所以我决定将IDEA安装在虚拟机上. 首 ...
- 杨其菊201771010134《面向对象程序设计Java》第二周学习总结
第三章 Java基本程序设计结构 第一部分:(理论知识部分) 本章主要学习:基本内容:数据类型:变量:运算符:类型转换,字符串,输入输出,控制流程,大数值以及数组. 1.基本概念: 1)标识符:由字母 ...
- 201777010217-金云馨《面向对象程序设计(Java)》第二周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- 201871010115——马北《面向对象程序设计JAVA》第二周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- 201871010132——张潇潇《面向对象程序设计JAVA》第二周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- 网易云课堂_C语言程序设计进阶_第二周:指针:取地址运算和指针、使用指针、指针与数组、指针与函数、指针与const、指针运算、动态内存分配_2信号报告
2 信号报告(5分) 题目内容: 无线电台的RS制信号报告是由三两个部分组成的: R(Readability) 信号可辨度即清晰度. S(Strength) 信号强度即大小. 其中R位于报告第一 ...
- 面向对象程序设计--Java语言第二周编程题:有秒计时的数字时钟
有秒计时的数字时钟 题目内容: 这一周的编程题是需要你在课程所给的时钟程序的基础上修改而成.但是我们并不直接给你时钟程序的代码,请根据视频自己输入时钟程序的Display和Clock类的代码,然后来做 ...
随机推荐
- java中File类中list()和listFiles()方法区别
list()和listFiles()方法区别: 1.返回值类型不同:前者为String数组,后者为File对象数组 2.数组中元素内容不同:前者为string类型的[文件名](包含后缀名),后者为Fi ...
- index.js:13 Uncaught TypeError: Cannot read property 'split' of undefined
使用 webpack 编译 Vue 项目时出现报错: index.js:13 Uncaught TypeError: Cannot read property 'split' of undefined ...
- vue2入坑随记(二) -- 自定义动态组件
学习了Vue全家桶和一些UI基本够用了,但是用元素的方式使用组件还是不够灵活,比如我们需要通过js代码直接调用组件,而不是每次在页面上通过属性去控制组件的表现.下面讲一下如何定义动态组件. Vue.e ...
- 新手如何快速入门Python
学习任何一门语言都是从入门(1年左右),通过不间断练习达到熟练水准(3到5年),少数人最终能精通语言,成为执牛耳者,他们是金字塔的最顶层.虽然万事开头难,但好的开始是成功的一半,今天这篇文章就来谈谈如 ...
- 关于redis内部的数据结构
最大感受,无论从设计还是源码,Redis都尽量做到简单,其中运用到的原理也通俗易懂.特别是源码,简洁易读,真正做到clean and clear, 这篇文章以unstable分支的源码为基准,先从大体 ...
- 测序分析软件-phred的安装
1.进入phred官网,给作者写信,获得所需的软件,大约需要两三天的时间即可收到回信. 2.根据作者的指示下载,解压相应软件. 3.以笔者本人的安装为例unbuntu系统(phred自带的instal ...
- bootstrap中的下拉菜单
下拉菜单必要的代码: <div class="container"> <div class="dropdown"> <butt ...
- getElementById和querySelector方法的区别
"querySelector 属于 W3C 中的 Selectors API 规范 .而 getElementsBy 系列则属于 W3C 的 DOM 规范" 1.区别 getXXX ...
- angular嵌入注入服务实例
<!DOCTYPE html> <html lang="en" ng-app="myapp"> <head> <met ...
- [0] WCF开发下,提示HTTP 无法注册 URL 进程不具有此命名空间的访问权限
Visual Studio以管理员的身份运行就可以了.