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的更多相关文章

  1. 集训队日常训练20181117 DIV2

    大佬们一顿操作猛如虎,拼命AC强啊 4262: 区间异或  Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByteTotal ...

  2. 集训队日常训练20181124 DIV2

    急急忙忙要出去比赛就拉了一场有点sb的题目 5202: 网络寻路  时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte总提交: 15            ...

  3. 集训队日常训练20181110 DIV2 题解及AC代码

    4375: 孪生素数  Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByteTotal Submit: 324       ...

  4. 集训队日常训练20181201 C 1003 : 种类数

    时间限制(普通/Java):2000MS/6000MS     内存限制:65536KByte总提交: 8            测试通过:5 描述 一共有 n个数,第 i 个数是 xi ,其中xi  ...

  5. 集训队日常训练20181201 E 1005 : 小蝌蚪

    时间限制(普通/Java):500MS/1500MS     内存限制:65536KByte总提交: 25            测试通过:5 描述 有 n 个装着小蝌蚪的水缸排成一排,你拥有一个无限 ...

  6. 集训队日常训练20180525-DIV2

    A.2295 求有多少素数对和等于n. 暴力. #include <bits/stdc++.h> using namespace std; int ss(int n) { ,a=sqrt( ...

  7. 集训队日常训练20180525-DIV1

    A.2805 N*M的图,每次浇水(X1,Y1)-(X2,Y2)围成的矩形,问最后有多少点被浇水了. 暴力. #include<bits/stdc++.h> using namespace ...

  8. 集训队日常训练20180518-DIV1

    A.3583 n根木棍是否能分成相等两堆. 背包dp,首先求和sum,如果为偶数就说明不行,否则考虑做一个sum/2大小的背包. #include<bits/stdc++.h> using ...

  9. 集训队日常训练20180513-DIV1

    A.3132 给一个有向图,问能否从任意点出发都能进入一个环中. 深搜. #include<bits/stdc++.h> using namespace std; ; vector< ...

随机推荐

  1. 微信小程序 button 按钮所有默认的样式

    小程序默认样式 // 默认样式 button { position:relative; display:block; margin-left:auto; margin-right:auto; padd ...

  2. Python中实现对list做减法操作介绍

    Python中实现对list做减法操作介绍 这篇文章主要介绍了Python中实现对list做减法操作介绍,需要的朋友可以参考下 问题描述:假设我有这样两个list, 一个是list1,list1 = ...

  3. SpringCloud学习笔记(三):Rest微服务构建案例工程模块

    需要具备的知识 1 springmvc+mybatis+mysql 2 Consumer消费者(Client)通过REST调用Provider提供者(Server)提供的服务 3 Maven的分包分模 ...

  4. 分布式事务的2PC、3PC和TCC

    1.2PC协议 2PC 是二阶段提交(Two-phase Commit)的缩写,顾名思义,这个协议分两阶段完成.第一个阶段是准备阶段,第二个阶段是提交阶段,准备阶段和提交阶段都是由事务管理器(协调者) ...

  5. python学习笔记4.1_检测和过滤异常值

    1.查看数据分布data.describe() 2.找出某列中符合筛选条件的值 3.找出符合筛选条件的行 4.用np.sign(data)*3设置绝对值的标准 data[np.abs(data)> ...

  6. sql 递归查询,查出所有子节点

    with t as ( select b.* from Base_Department b where ParentId = 'cce4152c-3483-4334-b68d-155da627bca0 ...

  7. Leetcode937. Reorder Log Files重新排列日志文件

    你有一个日志数组 logs.每条日志都是以空格分隔的字串. 对于每条日志,其第一个字为字母数字标识符.然后,要么: 标识符后面的每个字将仅由小写字母组成,或: 标识符后面的每个字将仅由数字组成. 我们 ...

  8. koa中同步与异步的写法

    koa中间件洋葱圈模型,同步的写法 //node server.js //中间件机制 const Koa = require('koa') const app = new Koa() // app.u ...

  9. 二进制操作(1)–Bytes

    1,Bytes的单元被当作字符串处理. 例如: 有些介绍会声称上述程序会得到这样的结果:b'\x00\x00\x00\x00' 在python v2.7.10上是得不到此结果的. 实际上,如果 typ ...

  10. 转: V4L2驱动程序架构

    源地址:http://blog.chinaunix.net/uid-26101960-id-3297657.html 1 V4L2简介 video4linux2(V4L2)是Linux内核中关于视频设 ...