2023郑州大学招新赛暨选拔赛补题

U287342 A.NANA与字符串 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

U287344 B.NANA学跳舞 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

U287345 C.NANA去上课 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e6+6;
signed main(){
    int n;cin>>n;
    char ch='B';int ds=0;//记得一定要初始化
    int sum=0;
    for(int i=1;i<=n;i++){
        char tempp='A';//记得一定要初始化
        int tempd=0;
        if(i!=1){
            tempp=ch;//记录前一个的输入
            tempd=ds;
        }
        cin>>ch;cin>>ds;
        if(tempp==ch)sum+=abs(tempd-ds);
        else sum+=abs(tempd+ds);
    }
    sum+=ds;
    cout<<sum;
    return 0;
}

 U287346 D.NANA在夜市 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

#include <bits/stdc++.h>
using namespace std;
#define int long long

char mp[1010][1010];
bool f[1010][1010];
int dx[4] = {0, 0, 1, -1};
int dy[4] = {1, -1, 0, 0};//右 左 下 上
//向左旋转90度
int n; int m;
void dfs(int x, int y) {
    f[x][y] = true;//标记一个地方是否被访问过
    for (int i = 0; i < 4; i++) {
        int ax = x + dx[i];
        int ay = y + dy[i];
        if (ax >= 1 && ax <= n && ay >= 1 && ay <= m && !f[ax][ay] &&
            ((i == 0 && mp[ax][ay] == 'L') || (i == 1 && mp[ax][ay] == 'R') ||
             (i == 2 && mp[ax][ay] == 'U') || (i == 3 && mp[ax][ay] == 'D'))) {
            dfs(ax, ay);//好好理解一下
        }
    }
}

void solve() {
    // int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        for(int j = 1;j <= m;j++)
        cin >> mp[i][j];
    }

    int ans = 0;
    dfs(n,m);//从终点出发

    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            if (f[i][j]) {//访问到了
                ans++;//数量++
            }
        }
    }

    cout << ans;
}

signed main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int T=1;
    //cin >> T;
    while (T--)solve();
    return 0;
}

U287347 E.NANA与最后的旅程 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 

U287349 F.NANA的排名 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+6;
int l[N], r[N], v[N], cnt[610];
//l表示最低分 r表示最高分 v表示五科总分
void solve() {
    int n;
    cin >> n;

    for (int i = 1; i <= n; i++) {
        cin >> l[i] >> r[i];
		v[i] = 0;

        for (int j = 0; j < 5; j++) {
            int x;
            cin >> x;
            v[i] += x;
        }

        cnt[v[i] + l[i]]++;//低分的情况下各个分数的人数
    }

    for (int i = 600; i >= 1; i--) {
        cnt[i] += cnt[i + 1];
    }//cnt[i]表示了分数大于等于i的人数个数

    for (int i = 1; i <= n; i++) {
        cout << cnt[v[i] + r[i]+1] + 1 << '\n';
    }//分数大于等于v[i]+r[i]+1的人数有cnt[v[i]+r[i]+1]个
}    

signed main() {
    int T;T = 1; //cin >> T;
    while (T--)solve();
    return 0;
}

U287350 G.NANA看天鹅舞会 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 

//贪心
#include <iostream>
using namespace std;
#define int long long
signed main()
{
	int n, m, a, b, c;
	cin >> n >> m >> a >> b >> c;
	if(n > m) swap(n, m);
	int res = n * a;
	m -= n;
	res += (m / 2) * b;
	if(m & 1) res -= c;
	cout << res << '\n';
}
//无论如何代价都是两只 所以那种思路是错的

 U287351 H.NANA去上课 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

 U287352 I.NANA做胡辣汤 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e6+6;
int a[N];
int b[N];
signed main(){
    int sum=0;
    int n,k;cin>>n>>k;
    for(int i=1;i<=n;i++)cin>>a[i];//代表每个食材的价值
    for(int i=1;i<=n;i++)cin>>b[i];//代表每个食材是否被处理好
    for(int i=1;i<=n;i++){
        if(b[i])sum+=a[i];//选上了就加上
    }
    // int mx=-0x3f3f;
    // for(int i=1;i+k-1<=n;i++){
    //     if(b[i])continue;
    //     int temp=0;
    //     for(int j=i;j<=i+k-1;j++){
    //         if(!b[j])temp+=a[j];
    //     }
    //     mx=max(temp,mx);
    // }
    // cout<<mx+sum;
    for(int i=1;i<=k;i++){//滑动窗口的开始,这个窗口内
        if(!b[i])sum+=a[i];//没有被选过 就选上
    }
    int ans=sum;
    for(int i=k+1;i<=n;i++){//枚举右端点 右端点是i 长度是k i-x+1=k 左端点是i-k+1
        if(!b[i-k])sum-=a[i-k];//i-k是左端点的左边
        if(!b[i])sum+=a[i];//右端点
        ans=max(sum,ans);//和最开始的情况比较
    }
    cout<<ans<<'\n';
    return 0;
}

U287353 J.NANA与她的朋友们 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 

#include <bits/stdc++.h>
using namespace std;
#define int long long
map<int,int> mp;
signed main(){
	int n, k, x; scanf("%lld %lld",&n, &k);
	vector<int> vec;
	for(int i = 0; i < n; i ++){
		scanf("%lld", &x);
		if(!mp.count(x)) vec.push_back(x);//每一出现过 就放进去
		mp[x] ++;//出现的次数++
	}
	sort(vec.begin(), vec.end());
	int hh = 0, tt = vec.size() - 1;//左右指针
	while(hh < tt){
		int l = mp[vec[hh]];//最小的数的出现次数
		int r = mp[vec[tt]];//最大的数的出现次数
		if(l < r){//最小的数的出现次数<最大的数的出现次数
			int num = vec[hh + 1] - vec[hh];//差值
			int cnt = l;//需要操作的个数
			if(k >= cnt * num)//可操作的次数>=需要操作的个数*差值
			{
				k -= cnt * num;//减去操作的次数
				mp[vec[hh + 1]] += mp[vec[hh]];//加到下一个数上去
				hh ++;	//左指针++
			} 
			else//可操作的个数<需要操作的个数*差值
			{
				int t = k / cnt;//计算最多能减少多少差值
				// k -= t * cnt;//k>=差值*需要操作的次数
				int res = vec[tt] - vec[hh] - t;
				cout << res << '\n';
				return 0;
			}
		}
		else{//最小的数的出现次数>=最大的出现次数
			int num = vec[tt] - vec[tt - 1];//找一下差值
			int cnt = r;//个数
			
			if(k >= cnt * num)
			{
				k -= cnt * num;
				mp[vec[tt - 1]] += mp[vec[tt]];
				tt --;
			}
			else
			{//就算是0也可以 是0的化 k就-0
				int t = k / cnt;
				// k -= t * cnt;
				int res = vec[tt] - t - vec[hh];
				cout << res << '\n';
				return 0;//直接return
			}
		}
		// if(vec[tt]-vec[hh]==0){cout<<0<<'\n';break;}
	}
	cout<<0<<'\n';
}

U287354 K.NANA在郑州 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 

//打表
#include <bits/stdc++.h>
using namespace std;
int cal(char x){
    if(x=='a'||x=='d'||x=='g'||x=='j'||x=='m'||x=='p'||x=='t'||x=='w')return 1;
    if(x=='b'||x=='e'||x=='h'||x=='k'||x=='n'||x=='q'||x=='u'||x=='x')return 2;
    if(x=='c'||x=='f'||x=='i'||x=='l'||x=='o'||x=='r'||x=='v'||x=='y')return 3;
    if(x=='s'||x=='z')return 4;
}
int main(){
    int n;cin>>n;
    int sum=0;
    for(int i=1;i<=n;i++){
        string s;cin>>s;
        for(int j=0;j<s.size();j++)sum+=cal(s[j]);
    }
    cout<<sum+n-1;
    return 0;
}

U287355 L.NANA与梦中的洛阳 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值