第26次CCF计算机软件能力认证

目录

T3 

T2

T1


T3 

        码风较为清奇的70分代码(赛时写的,现在懒得调,先放上来再说)

        用一个map将角色名映射成数字,然后建2个map数组,其下标对应映射前的角色,然后分别表示这个角色关联的用户和用户组名称,用bool的值代表该角色是否关联了用户和用户组。

        然后同上,建3个map数组分别表示下标对应角色能进行的操作,资源和资源名称。

        map乱搞。

#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
const int N = 510;
string res[N];//临时存关联用户组
map<string, int> peo;//将角色映射成数字
int f1[N], f2[N], f3[N];//判断分别可以匹配所有操作,资源,资源种类
map<string, bool> up[N], gp[N];//分别对应用户,用户组
map<string, bool> op[N], sc[N], sn[N];//操作,资源,资源种类
//数组的维度代表是哪一个角色
//然后就是硬模拟一下
int main(){
	string a, b, c, d, e;
	int n, m, q;
	cin >> n >> m >> q;
	for(int i = 1; i <= n; i++) {
		cin >> a;
		peo[a] = i;
		int nv;
		cin >> nv;
		for(int j = 1; j <= nv; j++) {
			cin >> b;
			if(b == "*") {
				f1[i] = 1;
			}
			op[i][b] = 1;
		}
		int no;
		cin >> no;
		for(int j = 1; j <= no; j++) {
			cin >> c;
			if(c == "*") {
				f2[i] = 1;
			}
			sc[i][c] = 1;
		}
		int nn;
		cin >> nn;
		if(nn == 0) f3[i] = 1;
		for(int j = 1; j <= nn; j++) {
			cin >> d;
			sn[i][d] = 1;
		}
	}
	for(int i = 1; i <= m; i++) {
		cin >> a;
		int ns;
		cin >> ns;
		while(ns --){
		cin >> b >> c;
		if(b == "g") {
			gp[peo[a]][c] = 1;
		}
		if(b == "u") {
			up[peo[a]][c] = 1;
		}
		}
	}
	while(q--) {
		int flag = 0;
		cin >> a;
		int ng;
		cin >> ng;
		for(int i = 1; i <= ng; i++)
		cin >> res[i];
		cin >> b >> c >> d;
		for(int i = 1; i <= ng; i++) {
			for(int j = 1; j <= n; j++) {
				if(gp[j][res[i]]) {
					if((f1[j] || op[j][b]) && (f2[j] || sc[j][c]) && (f3[j] || sn[j][d])) {
						flag = 1;
						break;
					}
				}
			}
			if(flag) break;
		}
		if(!flag)
		for(int i = 1; i <= n; i++) {
			if(up[i][a]) {
				if((f1[i] || op[i][b] ) &&(f2[i] || sc[i][c]) && (f3[i] || sn[i][d])) {
					flag = 1;
					break;
				}
			}
		}
		if(flag) cout << 1 << "\n";
		else cout << 0 << "\n";
	}
}

T2

        用map模拟一下就行了。

        先用一个数组记录一下大地图里面1的坐标。然后以每个为1的坐标为左下角的点,直接和藏宝图匹配就行了。

#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
const int N = 2e3 + 10;
map<pair<int,int>, bool>  a;
int b[N][N];
pair<int, int> c[N];
int main() {
	int n, L, s;
	cin >> n >> L >>s;
	for(int i = 1, x, y; i <= n; i++) {
		cin >> x >> y;
		a[{x, y}] = 1;
		c[i - 1].first = x;
		c[i - 1].second = y;
	}
	for(int i = s; i >= 0; i--) {
		for(int j = 0; j <= s; j++) {
			cin >> b[i][j];
		}
	}
	int ans = 0;
	for(int i = 0; i < n; i++) {
		if(c[i].first <= L -s && c[i].second <= L -s) {
			bool flag = 1;
			int x = c[i].first, y = c[i].second;
			for(int i = 0; i <= s; i++){
				for(int j = 0; j <=s;j++) {
					if(b[i][j] != a[{x + i, y + j}]) {
						flag = 0;
						break;
					}
				}
			}
			if(flag) ans++;
		}
	}
	cout << ans << "\n";
}

T1

        简单模拟

#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
const int N = 1e3 + 10;
double a[N];
int main() {
	double n;
	cin >> n;
	double sum = 0;
	for(int i = 1; i <= n; i++) {
		cin >> a[i];
		sum += a[i];
	}
	double b = sum / n;
	double d = 0;
	for(int i = 1; i <= n; i++) {
		d += (a[i] - b) * (a[i] - b);
	}
	d = d / n;
	for(int i = 1; i <= n; i++) {
		double ans = (a[i] - b) / sqrt(d);
		printf("%.6f\n", ans);
	}
	
	return 0;
}

——————————————————————————————————————————

        由于赛时只动了三题就只放了三题上来了。

        本次感悟:stl永远的神。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Krito.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值