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

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

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

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

#include 
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<

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

#include 
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 
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 
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 
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<

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

#include 
using namespace std;
#define int long long
map mp;
signed main(){
	int n, k, x; scanf("%lld %lld",&n, &k);
	vector 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 
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

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

你可能感兴趣的:(算法)