集训队日常训练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< ...
随机推荐
- 19-11-08-Night
再咕咕咕会被爆捶吗??? ZJ: 喜闻乐见: 27 Miemeng 60 01:59:43 100 01:59:44 0 01:59:44 160 01:59:44 最水的$T1$挂了???? $T2 ...
- Bitcoin 的基本原理
昨天读到了 Bitcoin 的中文介绍,觉得非常有意思.不过上面这篇文章解释的非常不靠谱,我花了一晚上去Bitcoin的官方网站 仔细研究了一下,总算理解了其原理.感觉非常有启发,尤其是对虚拟货币的流 ...
- rsync命令集合
rsync -avz rsync://logs@211.151.78.206/www_logs/2014/03/27/* /mnt/hgfs/iautoslogs/
- WPF MVVM模式不用Prism
上一个例子使用了Prism.这个例子不用Prism.用自己封装的库LiuxhCSDLL,其实也差不多. 一.程序结构 二.界面代码以及界面效果 <Window x:Class="WPF ...
- Markdown 格式标记符号说明
Markdown 格式标记符号说明 1. 标题 在行首插入 1 到 6个#,分别表示标题 1 到标题 6 # 这是标题1 ## 这是标题1 ###### 这是标题6 点击保存后的效果: 标题1 标题2 ...
- MFC编译Freetype2.3.7
从http://www.freetype.org下载源代码. FreeType2库源码包中包含多种环境与编译器下的make文件,其中还包含vc的项目文件. 我用的是VC,所以首先找到VC环境的项目文件 ...
- 嘴巴题7 BZOJ1426: 收集邮票
Time Limit: 1 Sec Memory Limit: 162 MB Submit: 546 Solved: 455 [Submit][Status][Discuss] Description ...
- 03.Hibernate配置文件之核心配置文件
一.核心配置文件的两种配置方式 1.属性文件方式 hibernate.properties(基本不会选用 hibernate.connection.driver_class=com.mysql.jdb ...
- ROS多线程编程
int main(int argc, char **argv) { ros::init(argc, argv, "multi_sub"); multiThreadListener ...
- JS的第七种语言类型--symbol
今天浏览网页的时候发现,JS中有七种语言类型.我的内心???百度一下哪里来的第七种!! 好吧跟着来回顾一下JS的前6种undefined null boolean string numver obje ...