集训队日常训练20180518-DIV2
A.3232
n个物品,换取要花积分,问刚好花完积分能换最大多少价值的物品。
多重背包。
#include <bits/stdc++.h>
using namespace std;
int t[];
int main()
{
int m,n,i,a,b,c,T,j,k;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&m,&n);
memset(t,,sizeof(t));
for(k=;k<n;k++)
{
scanf("%d%d%d",&a,&b,&c);
if(t[c]<a)
t[c]=a;
for(i=;i<=b;i++)
{
for(j=m;j>=c;j--)
{
if(j-c*i>=&&t[j-c*i]&&t[j-c*i]+a*i>t[j])
t[j]=t[j-c*i]+a*i;
}
} }
if(t[m]) printf("The maximum value is %d.\n",t[m]);
else printf("This is impossible.\n");
}
return ;
}
A.cpp
B.3196
医生优先处理级别最高的病人,给n件发生的事,对于每个OUT输出。
优先队列。
#include <bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
struct node
{
int a, b;
friend bool operator<(node a, node b)
{
if(a.a != b.a) return a.a < b.a;
return a.b > b.b;
}
};
int main()
{
int n;
while(cin >> n)
{
priority_queue<node> qu[];
string str;
int cnt = ;
for(int i = ; i<= n; i++)
{
cin >>str;
if(str == "IN")
{
int a,b; cin >> a >> b;
qu[a].push({b,++cnt});
}
else if(str == "OUT")
{
int a; cin >> a;
if(!qu[a].empty()) cout <<qu[a].top().b << endl, qu[a].pop();
else cout << "EMPTY\n";
}
}
}
return ;
}
B.cpp
C.4705
给一个数字串问取出一个连续的若干位能组成的最大素数。
暴力。
#include <bits/stdc++.h>
using namespace std; int main()
{
string str;
while(cin >>str)
{
int maxx = -;
for(int i = ; i < str.size(); i++)
{
int temp = ;
for(int j = i; j < str.size(); j++)
{
temp = temp* + str[j]-'';
int f = ;
for(int k = ; k <= sqrt(temp); k++)
{
if(temp % k == ) {f = ; break;}
}
if(temp != && !f) maxx = max(maxx,temp);
}
}
if(maxx == -) cout << "None\n";
else cout << maxx <<endl;
}
return ;
}
C.cpp
D.3293
给一个数A,一个数B,问AB的二进制中有几个数不同。
taozi的暴力。
#include<stdio.h>
int main()
{
__int64 a,b;
while(scanf("%I64d%I64d",&a,&b)!=EOF,a||b)
{
int c[]={},d[]={};
int c1=,d1=;
while(a)
{
c[c1--]=a%;
a/=;
}
while(b)
{
d[d1--]=b%;
b/=;
}
int ans=;
for(int i=;i<=;i++)
if(c[i]!=d[i])
ans++;
printf("%d\n",ans);
}
return ;
}
D.cpp O(64)
zenghuan_的位运算。
1. A & B,得到的结果C中的1的位表明了A和B中相同的位都是1的位;
2. A | B, 得到的结果D中的1的位表明了A和B在该位至少有一个为1的位,包含了A 与 B 都是1的位数,
经过前两步的位运算,,C 中1的位表明了A 和 B在该位都是1,D中为0的位表明了A 和 B 在该位都是0 ,所以进行第三步。
3. C ^ D,E 中为1的位表明了A 和 B不同的位。
#include<bits/stdc++.h>
using namespace std; int main()
{
long long a,b,c,d,e;
while(cin>>a>>b)
{
if(a==&&b==)break;
c=a&b;
d=a|b;
e=a^b;
long long sum=;
while(e!=)
{
e=((e-)&e);
sum++;
}
cout<<sum<<endl;
}
return ;
}
D.cpp O(64/8)
E.2938
m*n的矩阵,绕圈填。
模拟。
#include <bits/stdc++.h>
using namespace std;
int number;
int n,m,jishu;
char arr[][];
int main()
{
cin>>n>>m;
char s='A';
int t=n/+n%;
for(int i=;i<t;i++){
for(int j=i;j<=m-i-&&jishu<n*m;j++){
arr[i][j]=s++;
jishu++;
if(s=='Z'+) s='A';
}
for(int j=i+;j<=n-i-&&jishu<n*m;j++){
arr[j][m-i-]=s++;
jishu++;
if(s=='Z'+) s='A';
}
for(int j=m-i-;j>=i&&jishu<n*m;j--){
arr[n-i-][j]=s++;
jishu++;
if(s=='Z'+) s='A';
}
for(int j=n-i-;j>=i+&&jishu<n*m;j--){
arr[j][i]=s++;
jishu++;
if(s=='Z'+) s='A';
}
}
for(int i=;i<n;i++)
for(int j=;j<m;j++){
cout << " " << arr[i][j];
if(j==m-) cout << endl;
}
return ;
}
E.cpp
F.2763
求(0! + 1! + 2! + 3! + 4! + ... + n!)%m。
思维,首先n>m的部分都是0,1!%m和2!%m那么根据乘法的同余2!=1%m*2%m。
#include<stdio.h>
#define ll __int64
int main()
{
int t;
char n[];
scanf("%d",&t);
while(t--)
{
ll N=,M;
scanf("%s%I64d",n,&M);
for(int i=;n[i];i++)
{
if(N>=M){N=M;break;}
N=N*+n[i]-'';
}
ll ans=,sum=;
for(int i=;i<=N;i++)
sum=(sum+ans*i%M)%M,ans=ans*i%M;
printf("%I64d\n",sum%M);
}
return ;
}
F.cpp
G.4764
一个n×n的正方形,现在你在正方形的左下角,每次你可以顺时针走n+1单元的距离,求多少次之后你可以回到起点。
找规律。
#include<stdio.h>
int main(){
__int64 n,s;
while(scanf("%I64d",&n)!=EOF){
if(n%){
if((n+)%) s=*n+;
else s=n+;
}
else s=*n+;
printf("%I64d\n",s);
}
return ;
}
G.cpp
H.4781
ax3+bx2+cx+d=0 ,给出(a,b,c,d)求x。
暴力,由于根的范围很小,并且保留两位小数。注意在比较double会有误差,要取fabs<=1e-5。
#include<stdio.h>
#include<math.h>
int main(){
float a,b,c,d;
scanf("%f%f%f%f",&a,&b,&c,&d);
int i,f=;
for(i=-;i<=;i++){
float x=i*1.0/;
if(fabs(a*x*x*x+b*x*x+c*x+d)<=1e-){
if(f){
printf("%.2f",x);f=;
}
else printf(" %.2f",x);
}
}
printf("\n");
}
H.cpp
I.2955
n个点m条无向边,问至少加多少条边使得全图连通。
并查集模板题。
#include<bits/stdc++.h>
using namespace std;
int F[],T;
int Find(int x)
{
return F[x]==x? x:Find(F[x]);
}
int main(){
int N,M,A,B;
while(cin>>N>>M)
{
for(int i=;i<=N;i++)
F[i]=i;
T=N-;
for(int i=;i<M;i++)
{
cin>>A>>B;
int x=Find(A);
int y=Find(B);
if(x!=y)
{
F[x]=y;
T--;
}
}
cout<<T<<endl;
}
}
I.cpp
J.3207
n个点m条无向边,问C到D的最短路。
floyd最短路模板题,这里用dijstra也行。
#include<bits/stdc++.h>
using namespace std; int n,m,ss[][];
void dij(int a,int b)
{
int dis[n+][n+];
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
dis[i][j]=ss[i][j];
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(dis[i][j]>dis[k][j]+dis[i][k])
dis[i][j]=dis[k][j]+dis[i][k];
if(dis[a][b]==0x3f3f3f3f)cout<<"NO"<<endl;
else cout<<dis[a][b]<<endl;
}
int main()
{
int a,b,c;
cin>>n>>m;
memset(ss,0x3f,sizeof(ss));
for(int i=;i<m;i++)
{
cin>>a>>b>>c;
ss[a][b]=ss[b][a]=c;
}
while(cin>>a>>b)
{
if(a==&&b==)break;
dij(a,b);
}
return ;
}
J.cpp
集训队日常训练20180518-DIV2的更多相关文章
- 集训队日常训练20181117 DIV2
大佬们一顿操作猛如虎,拼命AC强啊 4262: 区间异或 Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal ...
- 集训队日常训练20181124 DIV2
急急忙忙要出去比赛就拉了一场有点sb的题目 5202: 网络寻路 时间限制(普通/Java):1000MS/3000MS 内存限制:65536KByte总提交: 15 ...
- 集训队日常训练20181110 DIV2 题解及AC代码
4375: 孪生素数 Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal Submit: 324 ...
- 集训队日常训练20181201 C 1003 : 种类数
时间限制(普通/Java):2000MS/6000MS 内存限制:65536KByte总提交: 8 测试通过:5 描述 一共有 n个数,第 i 个数是 xi ,其中xi ...
- 集训队日常训练20181201 E 1005 : 小蝌蚪
时间限制(普通/Java):500MS/1500MS 内存限制:65536KByte总提交: 25 测试通过:5 描述 有 n 个装着小蝌蚪的水缸排成一排,你拥有一个无限 ...
- 集训队日常训练20180525-DIV2
A.2295 求有多少素数对和等于n. 暴力. #include <bits/stdc++.h> using namespace std; int ss(int n) { ,a=sqrt( ...
- 集训队日常训练20180525-DIV1
A.2805 N*M的图,每次浇水(X1,Y1)-(X2,Y2)围成的矩形,问最后有多少点被浇水了. 暴力. #include<bits/stdc++.h> using namespace ...
- 集训队日常训练20180518-DIV1
A.3583 n根木棍是否能分成相等两堆. 背包dp,首先求和sum,如果为偶数就说明不行,否则考虑做一个sum/2大小的背包. #include<bits/stdc++.h> using ...
- 集训队日常训练20180513-DIV1
A.3132 给一个有向图,问能否从任意点出发都能进入一个环中. 深搜. #include<bits/stdc++.h> using namespace std; ; vector< ...
随机推荐
- Joomla - 部署(线上部署)
一.线上部署 线上部署可以理解为把本地网站迁移到线上,使用 akeeba backup 进行备份和迁移即可 参考 Joomla - akeeba backup(joomla网站备份.迁移扩展)的第三. ...
- VMware的下载安装
在学习使用LINNX系统之前,先在自己的电脑上安装一个虚拟机,流行的虚拟机软件有VMware(VMWare ACE).Virtual Box和Virtual PC,它们都能在Windows系统上虚拟出 ...
- rabbit mq 基础流程(转)
从AMQP协议可以看出,MessageQueue.Exchange和Binding构成了AMQP协议的核心,下面我们就围绕这三个主要组件 从应用使用的角度全面的介绍如何利用Rabbit MQ构建 ...
- HDU--2602(0-1背包)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2602 分析:一个0-1背包问题.记得<背包九讲>的方法. dp[j]=max{dp[j],d ...
- 删除文件夹时提示“You need permission to perform this action。。。”,如何解决?
Win10系统,有时,要删除某个文件夹,却提示“You need permission to perform this action...” 以下是我Google之后找到的解决方案 1.创建一个文本文 ...
- Nodejs之路(二)—— Nodejs再入门
一.在Node中使用模板引擎 js代码: // art-template不仅可以在浏览器使用,也可以在node中使用 // 1.安装 npm install art-temlate模板引擎 // 2. ...
- 通过three.js实现简易3D打印模型切片展示
现在的页面展示要求越来越高,美的展示总能吸引更多的访客.最近在学习3D打印中的切片算法,刚刚入门,发现通过three.js框架可以很好展示出3D切片细节(虽然我做的比较简单). //========= ...
- 2019-8-31-C#-已知点和向量,求距离的点
title author date CreateTime categories C# 已知点和向量,求距离的点 lindexi 2019-08-31 16:55:58 +0800 2018-05-08 ...
- redis消息队列先进先出需要注意什么?
通常使用一个list来实现队列操作,这样有一个小限制,所以的任务统一都是先进先出,如果想优先处理某个任务就不太好处理了,这就需要让队列有优先级的概念,我们就可以优先处理高级别的任务,实现方式有以下几种 ...
- Python基本数据类型之字典,集合,range
注: ange()是python的内置函数,用于创建整数的列表,可以生成递增或者递减的数列.ange也是python的内置函数,用于创造xrange对象用于迭代. 在python3中,range() ...