2019CCPC-江西省赛(重现赛)
Posted whdsunny
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2019CCPC-江西省赛(重现赛)相关的知识,希望对你有一定的参考价值。
1001
1002
1003
1004
1005
1006
1007 Traffic (HDOJ 6573)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6573
思路:枚举i和j,b[j]+x=a[i]是不可以的情况,标记此刻的x不可取,最后遍历看x能取的最小值
代码:
#include <bits/stdc++.h> using namespace std; const int maxn=1e5+10; int n,m; int a[maxn],b[maxn],cnt[maxn]; int main() while(~scanf("%d%d",&n,&m)) for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=m;i++) scanf("%d",&b[i]); memset(cnt,0,sizeof(cnt)); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(a[i]-b[j]<0) continue; cnt[a[i]-b[j]]++; for(int i=0;i<=maxn;i++) if(cnt[i]==0) printf("%d\n",i); break; return 0;
1008 Rng (HDOJ 6574)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6574
思路:打表
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1e9+7;
ll n;
ll quickpow(ll a,ll b)
if(b<0) return 0;
ll ret=1;
a%=mod;
while(b)
if(b&1) ret=(ret*a)%mod;
b>>=1;
a=(a*a)%mod;
return ret;
ll inv(ll a)
return quickpow(a,mod-2);
int main()
scanf("%lld",&n);
ll ans=((n+1)*inv(2*n))%mod;
printf("%lld\n",ans);
return 0;
1009 Budget (HDOJ 6575)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6575
题意:给出1e18范围内的小数,已经四舍五入到三位小数,求四舍五入到两位小数时失去的精度和
思路:因为范围过大,直接乘1000会爆,用字符串读入,只保留小数点后的。
代码:
#include <bits/stdc++.h>
using namespace std;
int n;
char s[55];
int main()
while(~scanf("%d",&n))
int ans=0;
while(n--)
scanf("%s",s);
int len=strlen(s);
int flag=0;
for(int i=0;i<len;i++)
if(s[i]==‘.‘)
flag=i;
break;
int ss=0;
for(int i=flag+1;i<len;i++)
ss=ss*10+s[i]-‘0‘;
if(ss>=995) ans+=1000-ss;
else
int tmp=ss%10;
if(tmp>=5) ans+=10-tmp;
else ans-=tmp;
printf("%.3f\n",(double)ans/1000.0);
return 0;
1010 Worker (HDOJ 6576)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6576
题意:给出n个工厂m个工人,每个工厂中每个人的产出为ai,要求每个工厂的总产出都相等,求问分配工人的方案
思路:要使得每个工厂的总产出相等,相当于求每个工厂单人产出的最小公倍数,求出为了达到最小公倍数每个工厂最少要安排多少人k,判断总工人数是否是k的倍数。m的范围不是1018而是1e18
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2020;
int n;
ll a[maxn],b[maxn],m;
int cnt[15];
int main()
while(~scanf("%d%lld",&n,&m))
memset(cnt,0,sizeof(cnt));
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
cnt[a[i]]=1;
int flag,tmp;
ll sum;
for(int i=1;i<=10;i++)
if(cnt[i]!=0)
flag=i;
sum=i;
break;
tmp=flag;
for(int i=flag+1;i<=10;i++)
if(cnt[i]==0) continue;
tmp=__gcd(sum,(ll)i);
sum=sum*i/tmp;
// cout<<sum<<endl;
ll kk=0;
for(int i=1;i<=n;i++)
b[i]=sum/a[i];
kk+=b[i];
if(m%kk==0)
ll tot=m/kk;
printf("Yes\n");
for(int i=1;i<n;i++)
printf("%lld ",b[i]*tot);
printf("%lld\n",b[n]*tot);
else
printf("No\n");
return 0;
1011 Class (HDOJ 6577)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6577
代码:
#include <bits/stdc++.h>
using namespace std;
int x,y;
int main()
scanf("%d%d",&x,&y);
int a=(x+y)/2,b=(x-y)/2;
printf("%d\n",a*b);
return 0;
以上是关于2019CCPC-江西省赛(重现赛)的主要内容,如果未能解决你的问题,请参考以下文章