中国(北方)大学生程序设计训练赛(第二周) (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类的代码,然后来做 ...
随机推荐
- Android控件的使用
1. RadioButton (单选按钮) 嵌入到RadioGroup中实现单选效果 android:checkedButton="radio的id值" int getchecke ...
- python之numpy库[1]
python-numpy python中的数据 一维数据 用列表和集合表示 数组与列表的关系 列表:数据类型可以不同 数组:数据类型可以相同 多维数据 用列表表示 高维数据 用字典表示 高维数据仅利用 ...
- (转)关于 Java 对象序列化您不知道的 5 件事
关于 Java 对象序列化您不知道的 5 件事 转自:http://developer.51cto.com/art/201506/479979.htm 数年前,当和一个软件团队一起用 Java 语言编 ...
- SimpleDateFormat日期格式(浅面)
java中使用SimpleDateFormat类的构造函数SimpleDateFormat(String str)构造格式化日期的格式, 通过format(Date date)方法将指定的日期对象格式 ...
- springmvc 之 返回值
springMVC对于controller处理方法返回值的可选类型 spring mvc 支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, Stri ...
- PHP设计模式:简单工厂
示例代码详见https://github.com/52fhy/design_patterns 简单工厂 简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例. 也就是使用的 ...
- ASP.NET Core部署到CentOS7,使用Nginx代理
ASP.NET Core 的运行环境由新开发的 Kestrel Server 负责,IIS 退回到 HTTP 的侦听器的角色,微软也特别为了这个需求开发了 IIS Platform Handler,以 ...
- Android view的测量及绘制
讲真,自我感觉,我的水平真的是渣的一匹,好多东西都只停留在知道和会用的阶段,也想去研究原理和底层的实现,可是一看到代码就懵逼了,然后就看不下去了, 说自己不着急都是骗人的,我自己都不信,前两天买了本& ...
- [leetcode-629-K Inverse Pairs Array]
Given two integers n and k, find how many different arrays consist of numbers from 1 to n such that ...
- 【LeetCode】112. Path Sum
题目: Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up ...