2013 ACM/ICPC Asia Regional Online —— Warmup
1003 Rotation Lock Puzzle
找出每一圈中的最大值即可
代码如下:
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<cstring>
#include<vector>
#define ll __int64
#define pi acos(-1.0)
#define MAX 50000
using namespace std;
ll a[][],b[];
vector<ll>q;
int main(){
int i,j,k,m,n;
while(scanf("%d",&n)&&n){
for(i=;i<=n;i++)
for(j=;j<=n;j++)
scanf("%I64d",&a[i][j]);
ll ans=a[n/+][n/+];
int num=;
m=n-;
for(k=;k<=n/;k++){
memset(b,,sizeof(b));
q.clear();
for(i=j=k;j<=n-k+;j++)
q.push_back(a[i][j]);
for(j--,i++;i<=n-k+;i++)
q.push_back(a[i][j]);
for(i--,j--;j>=k;j--)
q.push_back(a[i][j]);
for(i--,j++;i>k;i--)
q.push_back(a[i][j]);
for(i=;i<q.size();i++){
b[i%m]+=q[i];
}
ll sum=-;
int num1=;
for(i=;i<m;i++){
if(b[i]>sum){
sum=b[i];
if(m-i<i) num1=m-i;
else num1=i;
}
if(b[i]==sum){
if(m-i<num1) num1=m-i;
else if(i<num1) num1=i;
}
}
ans+=sum;
num+=num1;
m-=;
}
printf("%I64d %d\n",ans,num);
}
return ;
}
1005 Balls Rearrangement
多校联合的原题
代码如下:
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<cstring>
#include<vector>
#include<stdlib.h>
#define ll __int64
using namespace std;
ll gcd(ll a,ll b){
ll t;
if(a<b) swap(a,b);
while(b){
t=a;
a=b;
b=t%b;
}
return a;
}
ll lcm(ll a,ll b){
return a/gcd(a,b)*b;
}
ll cal(ll n,ll a,ll b){
ll ans=;
ll temp=;
ll x=,y=,i=;
while (i<n){
temp = min(a-x,b-y);
if (i+temp>n) temp=n-i;
ans += temp*abs(x-y);
x = (x+temp)%a;
y = (y+temp)%b;
i += temp;
}
return ans;
}
int main(){
int t;
ll n,a,b,c,ans;
cin>>t;
while (t--){
scanf("%I64d%I64d%I64d",&n,&a,&b);
if(a==b){
cout<<<<endl;
continue;
}
c=lcm(a,b);
if (c>=n) ans = cal(n,a,b);
else ans = cal(c,a,b)*(n/c)+cal(n%c,a,b);
printf("%I64d\n",ans);
}
return ;
}
1007 Hamming Distance
随机选取2个点即可,坑……
代码如下:
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<cstring>
#include<vector>
#define ll __int64
#define pi acos(-1.0)
#define MAX 50000
using namespace std;
char str[][];
int fun(char a)
{
if(a>='A'&&a<='Z') return a-'A'+;
return a-'';
}
int cal(char a[],char b[])
{
int num=;
for(int i=;i<;i++){
int s=fun(a[i]);
int p=fun(b[i]);
for(int j=;j<;j++){
num+=(s%!=p%);
s/=;
p/=;
}
}
return num;
}
int main(){
int t,i,j,k,n;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(i=;i<n;i++){
scanf("%s",&str[i]);
}
int num=;
for(i=;i<=;i++){
j=rand()%n;
k=rand()%n;
while(j==k) k=rand()%n;
int a=cal(str[j],str[k]);
if(a<num) num=a;
}
printf("%d\n",num);
}
return ;
}
1008 Permutation
这题和hdu 3092一样,只不过这题要求路径。
大致思路用筛法求质数,当尽可能是质数时LCM最大,转化为背包问题求。
代码如下:
#include<cstdio>
#include<vector>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#define M 10005
using namespace std;
double dp[M];
vector<int> p[M];
int prime[M],cnt,n;
bool f[M];
void init()
{
cnt=;
for(int i=;i<M;i++){
if(!f[i]) prime[cnt++]=i;
for(int j=;j<cnt&&i*prime[j]<M;j++){
f[i*prime[j]]=;
if(i%prime[j]==) break;
}
}
}
void solve()
{
memset(dp,,sizeof(dp));
for(int i=;i<=n;i++) p[i].clear();
for(int i=;i<cnt&&prime[i]<=n;i++){
double t=log(prime[i]);
for(int j=n;j>=prime[i];j--){
for(int k=prime[i],num=;k<=j;k*=prime[i],num++)
if(dp[j-k]+t*num>dp[j]){
dp[j]=dp[j-k]+t*num;
p[j]=p[j-k];
p[j].push_back(k);
}
}
}
}
int main()
{
int t,sum;
init();
scanf("%d",&t);
while(t--){
scanf("%d",&n);
solve();
sum=;
for(int i=;i<p[n].size();i++) sum+=p[n][i];
sum=n-sum;
while(sum--) p[n].push_back();
int s=;
sort(p[n].begin(),p[n].end());
for(int i=;i<p[n].size();i++){
int temp=s++;
for(int j=;j<p[n][i];j++)
printf("%d ",s++);
if(i==p[n].size()-) printf("%d\n",temp);
else printf("%d ",temp);
}
}
return ;
}
1010 Difference Between Primes
注意细节就可以了
代码如下:
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<cstring>
#include<vector>
#define ll __int64
#define pi acos(-1.0)
#define MAX 50000
using namespace std;
bool f[];
int prime[],cnt;
void init()
{
cnt=;
f[]=;
for(int i=;i<=;i++){
if(f[i]==) prime[cnt++]=i;
for(int j=;j<cnt&&i*prime[j]<=;j++){
f[i*prime[j]]=;
if(i%prime[j]==) break;
}
}
}
int main(){
init();
int i,t,n;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
bool flag=;
for(i=;i<cnt;i++){
if(prime[i]+n>&&f[prime[i]+n]==){
flag=;
break;
}
}
if(flag) printf("%d %d\n",prime[i]+n,prime[i]);
else puts("FAIL");
}
return ;
}
2013 ACM/ICPC Asia Regional Online —— Warmup的更多相关文章
- hduoj 4710 Balls Rearrangement 2013 ACM/ICPC Asia Regional Online —— Warmup
http://acm.hdu.edu.cn/showproblem.php?pid=4710 Balls Rearrangement Time Limit: 6000/3000 MS (Java/Ot ...
- hduoj 4708 Rotation Lock Puzzle 2013 ACM/ICPC Asia Regional Online —— Warmup
http://acm.hdu.edu.cn/showproblem.php?pid=4708 Rotation Lock Puzzle Time Limit: 2000/1000 MS (Java/O ...
- hduoj 4715 Difference Between Primes 2013 ACM/ICPC Asia Regional Online —— Warmup
http://acm.hdu.edu.cn/showproblem.php?pid=4715 Difference Between Primes Time Limit: 2000/1000 MS (J ...
- hduoj 4712 Hamming Distance 2013 ACM/ICPC Asia Regional Online —— Warmup
http://acm.hdu.edu.cn/showproblem.php?pid=4712 Hamming Distance Time Limit: 6000/3000 MS (Java/Other ...
- hduoj 4706 Herding 2013 ACM/ICPC Asia Regional Online —— Warmup
hduoj 4706 Children's Day 2013 ACM/ICPC Asia Regional Online —— Warmup Herding Time Limit: 2000/1000 ...
- hduoj 4707 Pet 2013 ACM/ICPC Asia Regional Online —— Warmup
http://acm.hdu.edu.cn/showproblem.php?pid=4707 Pet Time Limit: 4000/2000 MS (Java/Others) Memory ...
- hduoj 4706 Children's Day 2013 ACM/ICPC Asia Regional Online —— Warmup
http://acm.hdu.edu.cn/showproblem.php?pid=4706 Children's Day Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 4714 Tree2cycle(树状DP)(2013 ACM/ICPC Asia Regional Online ―― Warmup)
Description A tree with N nodes and N-1 edges is given. To connect or disconnect one edge, we need 1 ...
- HDU 4749 Parade Show 2013 ACM/ICPC Asia Regional Nanjing Online
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4749 题目大意:给一个原序列N,再给出一个序列M,问从N中一共可以找出多少个长度为m的序列,序列中的数 ...
随机推荐
- SQL Server中查询用户的对象权限和角色的方法
--SQL Server中查询用户的对象权限和角色的方法 -- 查询用户的object权限 exec sp_helprotect NULL, 'sa' -- 查询用户拥有的role exec sp_h ...
- C++ json库jsoncpp 吐槽
Explain 最近在做游戏接入SDK时用到C++的json库jsoncpp,jsoncpp 是一款优秀的json库,但恶心的一点是它采用Assert作为错误处理方法,而assert在linux下通过 ...
- C#和ASP.Net面试题目集锦
1.有哪几种方法可以实现一个类存取另外一个类的成员函数及属性,并请举列来加以说明和分析.2.A类是B类的基类,并且都有自己的构造,析构函数,请举例证明B类从实例化到消亡过程中构造,析构函数的执行过程. ...
- Matlab实现加性高斯白噪声信道(AWGN)下的digital调制格式识别分类
Matlab实现加性高斯白噪声信道(AWGN)下的digital调制格式识别分类 内容大纲 加性高斯白噪声信道(AWGN)下的digital调制格式识别分类 (1. PSK; 2. QPSK; 3.8 ...
- 容器适配器之stack
参见http://www.cplusplus.com/reference/stack/stack/ template<class T, class Container = deque<T& ...
- android输入法中的imeoption
SDK升级到1.5以后,当文本输入框(EditText及其子类)获得焦点后,会弹出系统自带的软键盘 为了实现一些自定义的功能,就稍微研究了下 * 当layout中有多个EditText,把每个控件的a ...
- android 开发 对图片编码,并生成gif图片
demo场景: 将2张静态的png格式图片组合生成一个gif图片,间隔500毫秒,关键类:AnimatedGifEncoder 如需要解析gif获取每帧的图片,可参考上一篇博客:<android ...
- 1564: [NOI2009]二叉查找树 - BZOJ
Description Input Output只有一个数字,即你所能得到的整棵树的访问代价与额外修改代价之和的最小值.Sample Input4 101 2 3 41 2 3 41 2 3 4Sam ...
- EditPlus配置[C++] [Python] [Java] 编译运行环境
以前一直用Codeblocks写C++,eclipse写Java,再在eclipse里面集成PyDev写Python,首先无法忍受代码自动补全功能(这个功能也许你万分喜欢),也无法忍受如此重量级的ID ...
- 8大排序算法图文讲解 分类: Brush Mode 2014-08-18 11:49 78人阅读 评论(0) 收藏
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 常见的内部排序算法有:插入排序.希尔排序. ...