1 归一化处理
100
#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
int main()
{
int n, i, sum = 0, cur;
double D = 0, ave, c;
vector<int> v;
cin >> n;
for (i = 0; i < n; i++)
{
cin >> cur;
sum += cur;
v.push_back(cur);
}
ave = 1.0 * sum / n;
for (auto ii : v)
{
D += (ave - ii) * (ave - ii);
}
D /= n;
for (auto ii : v)
{
c = (ii - ave) / sqrt(D);
printf("%f\n", c);
}
return 0;
}
2 寻宝!大冒险!
100
#include<iostream>
#include<set>
using namespace std;
struct node
{
int x, y;
node(int a, int b) :x(a), y(b) {}
bool operator < (const node& node)const
{
if (x != node.x)return x < node.x;
return y < node.y;
}
};
int main()
{
set<node> ss;
int n, l, s, map[55][55];
cin >> n >> l >> s;
int a, b;
int i, j;
for (i = 0; i < n; i++)
{
cin >> a >> b;
ss.insert(node(a, b));
}
for (i = s; i >= 0; i--)
{
for (j = 0; j <= s; j++)
{
cin >> map[i][j];
}
}
int flag = 1, num = 0;
for (auto ii : ss)
{
flag = 1;
for (i = 0; i <= s; i++)
{
for (j = 0; j <= s; j++)
{
if (ii.x + i > l || ii.y + j > l)
{
flag = 0;
break;
}
if (map[i][j])
{
if (ss.find(node(ii.x + i, ii.y + j)) == ss.end())
{
flag = 0;
break;
}
}
else
{
if (ss.find(node(ii.x + i, ii.y + j)) != ss.end())
{
flag = 0;
break;
}
}
}
if (flag == 0)break;
}
if (flag)num++;
}
cout << num << endl;
return 0;
}
3 角色授权
70
#include<iostream>
#include<set>
#include<vector>
#include<string>
#include<map>
using namespace std;
struct character
{
string name;
set<string> operation;
set<string> source_kind;
set<string> source_name;
};
struct link
{
string name;
set<string> user;
set<string> group;
};
int main()
{
int n, m, q;
cin >> n >> m >> q;
int i, j;
string s, s1;
int cur, f1,f2,f3;
character temp;
//vector<character> vv;
map<string, character> mm;
map<string, set<string>> user;
map<string, set<string>> group;
vector<link> ll;
//n个角色
for (i = 0; i < n; i++)
{
character c;
cin >> c.name;
cin >> cur;
for (j = 0; j < cur; j++)
{
cin >> s;
c.operation.insert(s);
}
cin >> cur;
for (j = 0; j < cur; j++)
{
cin >> s;
c.source_kind.insert(s);
}
cin >> cur;
for (j = 0; j < cur; j++)
{
cin >> s;
c.source_name.insert(s);
}
mm.insert(pair<string, character>(c.name, c));
}
//m个角色关联
for (i = 0; i < m; i++)
{
link l;
cin >> l.name;
cin >> cur;
for (j = 0; j < cur; j++)
{
cin >> s >> s1;
if (s == "u")
{
//l.user.insert(s1);
if (user.find(s1)==user.end())
{
set<string> ss;
ss.insert(l.name);
user.insert(pair<string, set<string>>(s1, ss));
}
else
{
user[s1].insert(l.name);
}
}
else
{
if (group.find(s1) == group.end())
{
set<string> ss;
ss.insert(l.name);
group.insert(pair<string, set<string>>(s1, ss));
}
else
{
group[s1].insert(l.name);
}
//l.group.insert(s1);
}
}
//ll.push_back(l);
}
set<string> t1,t2;
string op_n, s_k, s_n;
for (i = 0; i < q; i++)
{
cin >> s;
for (auto ii : user[s])
{
t1.insert(ii);
}
//for (auto ii : ll)
//{
// if (ii.user.find(s) != ii.user.end())t1.insert(ii.name);
//}
cin >> cur;
for (j = 0; j < cur; j++)
{
cin >> s;
/*for (auto ii : ll)
{
if (ii.group.find(s) != ii.group.end())t1.insert(ii.name);
}*/
for (auto ii : group[s])
{
t1.insert(ii);
}
}
cin >> op_n >> s_k >> s_n;
f1 = 0;
for (auto ii : t1)
{
temp = mm[ii];
if (temp.operation.find(op_n) != temp.operation.end() || temp.operation.find("*") != temp.operation.end())
{
if (temp.source_kind.find(s_k) != temp.source_kind.end() || temp.source_kind.find("*") != temp.source_kind.end())
{
if (temp.source_name.find(s_n) != temp.source_name.end() || temp.source_name.size() == 0)
{
f1 = 1;
}
}
}
if (f1)break;
}
if (f1)cout << 1 << endl;
else cout << 0 << endl;
t1.clear();
}
return 0;
}