北华大学第九届程序设计竞赛(同步赛)_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com)
目录
A-"北华"有几何_北华大学第九届程序设计竞赛(同步赛) (nowcoder.com)
B-学霸题 II_北华大学第九届程序设计竞赛(同步赛) (nowcoder.com)
C-小杜的字符串_北华大学第九届程序设计竞赛(同步赛) (nowcoder.com)
D-矿石精炼场_北华大学第九届程序设计竞赛(同步赛) (nowcoder.com)
G-114514国_北华大学第九届程序设计竞赛(同步赛) (nowcoder.com)
H-杰哥的激光炮_北华大学第九届程序设计竞赛(同步赛) (nowcoder.com)
M-超时空传送!!偷袭_北华大学第九届程序设计竞赛(同步赛) (nowcoder.com)
A-"北华"有几何_北华大学第九届程序设计竞赛(同步赛) (nowcoder.com)
签到题
#include<bits/stdc++.h>
#define ll long long
#define f(i,j,n) for(int i=j;i<n;i++)
#define PI acos(-1.0)
using namespace std;
const int INF=0x3f3f3f3f;
const int Mod=1e9+7;
const int N=1e6+6;
int main () {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cout<<11;
return 0;
}
B-学霸题 II_北华大学第九届程序设计竞赛(同步赛) (nowcoder.com)
对于每一个数字,比它小的数加和,比他大的个数*这个数,如何加和即为结果
#include<bits/stdc++.h>
#define ll long long
#define f(i,j,n) for(int i=j;i<n;i++)
#define PI acos(-1.0)
using namespace std;
const int INF=0x3f3f3f3f;
const int Mod=1e9+7;
const int N=1e6+6;
int n;
int h[N];
int m;
int b[N];
ll c[N];
ll sum;
int main () {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=0;i<n;i++)cin>>h[i];
cin>>m;
for(int i=0;i<m;i++)cin>>b[i];
sort(b,b+m);
c[0]=b[0];
for(int i=1;i<m;i++)c[i]=b[i]+c[i-1];
for(int i=0;i<n;i++){
int k=upper_bound(b,b+m,h[i])-b;
if(k!=0)sum+=c[k-1];
sum+=(m-k)*h[i];
}
cout<<sum;
return 0;
}
C-小杜的字符串_北华大学第九届程序设计竞赛(同步赛) (nowcoder.com)
如果三个都不相等,加2,如果其中两个相等,加1
#include<bits/stdc++.h>
#define ll long long
#define f(i,j,n) for(int i=j;i<n;i++)
#define PI acos(-1.0)
using namespace std;
const int INF=0x3f3f3f3f;
const int Mod=1e9+7;
const int N=1e6+6;
int n,sum;
string s[3];
int main () {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n;
cin>>s[0]>>s[1]>>s[2];
for(int i=0;i<n;i++){
if(s[0][i]==s[1][i]&&s[0][i]==s[2][i]){//3
}
else if(s[0][i]==s[1][i]||s[0][i]==s[2][i]||s[1][i]==s[2][i]){//2
sum++;
}
else if(s[0][i]!=s[1][i]&&s[0][i]!=s[2][i]&&s[1][i]!=s[2][i]){//1
sum+=2;
}
}
cout<<sum;
return 0;
}
D-矿石精炼场_北华大学第九届程序设计竞赛(同步赛) (nowcoder.com)
这道题需要注意的就是如果现在的钱不足以支撑购买足够的电力,可以先赚够钱再看提高收益后的值,最后比较一下大小即可
#include<bits/stdc++.h>
#define ll long long
#define f(i,j,n) for(int i=j;i<n;i++)
#define PI acos(-1.0)
using namespace std;
const int INF=0x3f3f3f3f;
const int Mod=1e9+7;
const int N=1e6+6;
ll t,w,m,E,D,c0,c1,p,e,d;
int main () {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>t;
while(t--){
cin>>w>>m>>E>>D>>c0>>d>>p>>c1>>e;
double cx=w+m*1.0;//0
double cy=0.0;//1
double ans;
m-=c0;//建造一个矿石lianqi
D+=d;
if(D>E&&e!=0){//如果负载超过总电力值,停电
D-=E;
int k=D/e;
if(D%e!=0)k++;
m-=k*c1;
}
if(m>=0)cy=w+w*p*1.0/100+m;
else cy=(w+m)+(w+m)*p*1.0/100;
if(w+m<0||(D>E&&e==0)){
ans=cx;
}
else{
ans=max(cx,cy);
}
printf("%.2f\n",ans);
}
return 0;
}
G-114514国_北华大学第九届程序设计竞赛(同步赛) (nowcoder.com)
纯暴力莽过去了,一开始一直不敢交
#include<bits/stdc++.h>
#define ll long long
#define f(i,j,n) for(int i=j;i<n;i++)
#define PI acos(-1.0)
using namespace std;
const int INF=0x3f3f3f3f;
const int Mod=1e9+7;
const int N=1e6+6;
int n;
int main () {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i1=0;i1<=n/11+1;i1++){
for(int j1=0;j1<=n/45+1;j1++){
for(int k1=0;k1<=n/14+1;k1++){
ll t=i1*11+j1*45+k1*14;
if(t>=n){
t-=n;
for(int i=0;i<=t/11+1;i++){
for(int j=0;j<=t/45+1;j++){
for(int k=0;k<=t/14+1;k++){
if(i*11+j*45+k*14==t){
cout<<i1<<' '<<j1<<' '<<k1<<"\n";
cout<<i<<' '<<j<<' '<<k;
return 0;
}
}
}
}
}
}
}
}
return 0;
}
这里贴一下题解的思路吧45-11*4=1元,即我支付给店家45元,店家再找我4张11元即可购买价值1元的物品。因此对于价值为n的物品,我们可以先支付⌊𝑛/45⌋张45元;假设剩余m元,剩余部分我们支付m张45元,店家再找给我们4m张11元即可。 不像我,我只会暴力
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n;
int main () {
cin>>n;
int k=n/45;
int p=n-k*45;
cout<<"0 "<<p+k<<" 0\n";
cout<<4*p<<" 0 0";
return 0;
}
H-杰哥的激光炮_北华大学第九届程序设计竞赛(同步赛) (nowcoder.com)
一个数学知识:对于一个长度为m,宽度为n的矩形,均分成m ∗ n个小方格,则对角线经过的小方格数量为m + n − ( m , n ) ,其中( m , n )为m 和n的最大公约数。
#include<bits/stdc++.h>
#define ll long long
#define f(i,j,n) for(int i=j;i<n;i++)
#define PI acos(-1.0)
using namespace std;
const int INF=0x3f3f3f3f;
const int Mod=1e9+7;
const int N=1e6+6;
//数学公式
int t;
int main () {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>t;
while(t--){
ll x,y;
ll sum=0;
cin>>x>>y;
sum=x+y-gcd(x,y);
cout<<sum<<"\n";
}
return 0;
}
M-超时空传送!!偷袭_北华大学第九届程序设计竞赛(同步赛) (nowcoder.com)
排个序后相加即可
#include<bits/stdc++.h>
#define ll long long
#define f(i,j,n) for(int i=j;i<n;i++)
#define PI acos(-1.0)
using namespace std;
const int INF=0x3f3f3f3f;
const int Mod=1e9+7;
const int N=1e6+6;
int n,sum;
int a[N];
bool cmp(int x,int y){
return x>y;
}
int main () {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=0;i<n;i++){
string s;
cin>>s>>a[i];
}
sort(a,a+n,cmp);
for(int i=0;i<min(9,n);i++){
sum+=a[i];
}
cout<<sum;
return 0;
}
其他的待补