集训队日常训练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< ...
随机推荐
- zabbix自动发现主机(转)
zabbix自动发现主机 2018年06月15日 18:02:52 loyal-Wang 阅读数:817更多 个人分类: zabbix 版权声明:本文为博主原创文章,转载请注明出处. https: ...
- 聊聊MVC和模块化以及MVVM和组件化
原文链接 小寒的博客,带你理解更深的世界 面向对象,模块化和MVC 面向对象是指把写程序映射到现实生活,从而一来逻辑性更强,更容易写好代码,二来代码很贴切,通俗易懂,更被人理解,三来更加容易拓展和管理 ...
- Go基础之函数递归实现汉诺塔
Go递归实现汉诺塔 package main import "fmt" // a 是源,b 借助, c 目的长度 func tower(a, b, c string, layer ...
- 怎样理解js数组中indexOf()的用法与lastIndexOf
第一首先你运行一下它的js代码: var arr1=["大学","中庸","论语","孟子","诗" ...
- java主函数参数传递args
a.javaJava应用程序的主入口方法main(String[] args),表示该方法需要接收一个字符串数组类型的参数, 如果该参数不指定,agrs接收的是null. 程序: public C ...
- Django项目: 4.用户登录登出功能
用户登录登出功能 一.功能需求分析 1. 登录退出功能分析 流程图 功能 登录页面 登录功能 退出功能 二.登录页面 1. 接口设计 接口说明 类目 说明 请求方法 GET url定义 /user/l ...
- python collections 模块 之 deque
class collections.deque(iterable[,maxlen]): 返回 由可迭代对象初始化的 从左向右的 deque 对象. maxlen: deque 的最大长度,一旦长度超出 ...
- 2019-10-31-C#-dotnet-获取整个局域网的-ip-地址
title author date CreateTime categories C# dotnet 获取整个局域网的 ip 地址 lindexi 2019-10-31 08:57:55 +0800 2 ...
- 一些常见的synthesis attribute
Noprune A Verilog HDL synthesis attribute that prevents the Quartus II software from removing a regi ...
- Django项目:CRM(客户关系管理系统)--73--63PerfectCRM实现CRM讲师下载作业
# teacher_urls.py # ————————62PerfectCRM实现CRM讲师讲课记录———————— from django.conf.urls import url from bp ...