HELLO WORLD !!!

The real hero is

to see the world as it is

and to love it !

figvalar

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  • L2-018 多项式A除以B
    //并没理解解题过程,怎么进行指数运算??

include <bits/stdc++.h>

using namespace std;
const int N = 1e5 +10;
double A[N] ,B[N] ,C[N];

double _45(double x)
{//
bool flg = 0;
if(x<0) flg = 1;
x = fabs(x);
int y = x100;
if(y%10 >= 5) y+=10;
y/=10;
if(flg == 1)return -(double)1.0
y/10;
return (double)1.0*y/10;
}

int main()
{
int n, m;
int indexa, indexb, indexc;
indexa = indexb = -1;

cin >> n;
for(int i = 0; i < n; i++)
{
	int x, y; cin >> x >> y;
	A[x] = y;
	indexa = max(indexa, x);
}

cin >> m;
for(int i = 0; i < m; i++)
{
	int x, y; cin >> x >> y;
	B[x] = y;
	indexb = max(indexb, x);
}
indexc = indexa - indexb;

while(indexa >= indexb)
{
	double k = A[indexa] / B[indexb];
	C[indexa - indexb] = k;
	for(int i = indexa, j = indexb; i >= 0 && j >= 0; i--, j--) A[i] -= k*B[j];
	while(indexa >= 0 && fabs(A[indexa])<=1e-6) indexa--;
}

int ccount = 0;
for(int i = indexc; i >= 0; i--)
{
	if(_45(fabs(C[i]))>=0.1) ccount++;
}
cout << ccount;
if(ccount == 0) printf(" 0 0.0"); 
else
{
	for(int i = indexc; i >= 0; i--)
	{
		if(_45(fabs(C[i]))>=0.1)
		{
			printf(" %d %.1lf", i, C[i]);
		}
	}
}
printf("\n");

int acount = 0;
for(int i = indexa; i >= 0; i--)
{
	if(_45(fabs(A[i]))>=0.1) acount++;
}
cout << acount;
if(acount == 0) printf(" 0 0.0"); 
else
{
	for(int i = indexa; i >= 0; i--)
	{
		if(_45(fabs(A[i]))>=0.1)
		{
			printf(" %d %.1lf", i, A[i]);
		}
	}
}
return 0;

}

  • L2-020 功夫传人
    复习:
    邻接表

include<bits/stdc++.h>

using namespace std;
const int N = 1e5 + 10;
int n;
double z, r, ans = 0;
vector dat[N];
int bz[N];

void dfs(int id, double energy)
{
if(bz[id] != 0)
{
ans += energybz[id];
return;
}
for(int i = 0; i < dat[id].size(); i++)
{
dfs(dat[id][i],energy
(100-r)/100);
}
}

int main()
{
cin >> n >> z >> r;
for(int i = 0; i < n; i++)
{
int k, x; cin >> k;
if(k == 0)
{
cin >> x;
bz[i] = x;
}
else
{
for(int j = 0; j < k; j++)
{
cin >> x;
dat[i].push_back(x);
}
}
}
dfs(0, z);
cout << (long long)ans;
return 0;
}

  • L2-021 点赞狂魔

include<bits/stdc++.h>

using namespace std;
struct nod
{
string id = "82e981hd";
int var = -1;
double aver = -1;
bool operator < (const nod &b) const
{
if(var == b.var) return aver > b.aver;
else return var > b.var;
};

};
int main()
{
int n; cin >> n;
nod a[n];
for(int i = 0; i < n; i++)
{
cin >> a[i].id;
int k, num = 0; cin >> k;
map<string,int>mp;
for(int j = 0; j < k; j++)
{
string s; cin >> s;
if(!mp.count(s))
{

			mp[s] = 1;
			num++;
		}
	}
	a[i].var = num;
	a[i].aver = 1.0*num/k;

//	cout << num << '\n';
}
sort(a, a + n);
for(int i = 0; i < 3; i++)
{
	if(i >= n)cout << "-";
	else cout << a[i].id; 
	if(i < 2)cout << ' ';
}
return 0;

}

  • L2-022 重排链表

include<bits/stdc++.h>

using namespace std;

struct nod
{
int val, nextid, id;

}dat[100010], ans[100010];
map<int,int> id_i;

int main()
{
int headid, n; cin >> headid >> n;
for(int i = 0; i < n; i++)
{
cin >> dat[i].id >> dat[i].val >> dat[i].nextid;
id_i[dat[i].id] = i;
}
int ver = id_i[headid], listcount = 0;
for(int i = 0; i < n; i++)
{
ans[i] = dat[ver];
listcount++;
if(dat[ver].nextid == -1) break;
ver = id_i[dat[ver].nextid];
}
int l = 0, r = listcount -1;
printf("%05d %d", ans[r].id, ans[r].val);
r--;
int jishuqi = 0;
//简易计数器
while(l <= r)
{
if(jishuqi%2 == 0)
{
printf(" %05d\n%05d %d", ans[l].id, ans[l].id, ans[l].val);
l++;
}
else
{
printf(" %05d\n%05d %d", ans[r].id, ans[r].id, ans[r].val);
r--;
}
jishuqi++;
}
cout << " -1";
return 0;
}

include<bits/stdc++.h>

using namespace std;

struct nod
{
int val, nextid, id;

}dat[100010], ans[100010];
map<int,int> id_i;

int main()
{
int headid, n; cin >> headid >> n;
for(int i = 0; i < n; i++)
{
cin >> dat[i].id >> dat[i].val >> dat[i].nextid;
id_i[dat[i].id] = i;
}
int ver = id_i[headid], listcount = 0;
for(int i = 0; i < n; i++)
{
ans[i] = dat[ver];
listcount++;
if(dat[ver].nextid == -1) break;
ver = id_i[dat[ver].nextid];
}
int l = 0, r = listcount -1;
printf("%05d %d", ans[r].id, ans[r].val);
r--;
int jishuqi = 0;
//简易计数器
while(l <= r)
{
if(jishuqi%2 == 0)
{
printf(" %05d\n%05d %d", ans[l].id, ans[l].id, ans[l].val);
l++;
}
else
{
printf(" %05d\n%05d %d", ans[r].id, ans[r].id, ans[r].val);
r--;
}
jishuqi++;
}
cout << " -1";
return 0;
}

  • L2-023 图着色问题

没过全部测试点,邻接图写的并不好,dfs去遍历vector<vector>时出错,复习vector的性质和规范的dfs写法。

include<bits/stdc++.h>

using namespace std;
const int N = 510;
vector<vector> a(N);
int color[N];

int main()
{
int V ,E, K; cin >> V >> E >> K;
for(int i = 0; i < E; i++)
{
int u, v; cin >> u >> v;
a[u].push_back(v);
a[v].push_back(u);
}
int k; cin >> k;
while(k--)
{
map<int,bool> col_exi;
int col_var = 0;
for(int i = 1; i <= V; i++)
{
cin >> color[i];
if(!col_exi.count(color[i]))
{
col_exi[color[i]] = 1;
col_var++;
}
}
if(col_var>K)
{
cout << "No\n";
continue;
}
bool ok = 0;
for(int j = 1; j <= V; j++)
{
for(int m = 0; m < a[j].size(); m++)
{
if(color[j] == color[a[j][m]])
{
cout << "No\n";
ok = 1;
break;
}
}
if(ok) break;
}
if(!ok) cout << "Yes\n";
ok = 0;
memset(color,-1,sizeof(color));
}
return 0;
}

  • L2-024 部落

include<bits/stdc++.h>

using namespace std;
//通过维护st,统计种类数,进行去重操作
map<int,bool> st;
int fa[10010];
int find(int x){return fa[x] == x ? x: fa[x] = find(fa[x]);}
void merge(int x, int y)
{
int xx = find(x), yy = find(y);
if(xx == yy) return ;
fa[xx] = yy;
return ;
}

int main()
{
int n; cin >> n;
for(int i = 0; i < 10010; i++)fa[i] = i;
for(int i = 0; i < n; i++)
{
int k, first_;
cin >> k;
for(int j = 0; j < k; j++)
{
if(j==0)
{
cin >> first_;
if(st.count(first_) == 0) st[first_] = 1;
}
else
{
int x; cin >> x;
if(st.count(x) == 0)st[x] = 1;
merge(x,first_);
}
}
}
cout << st.size() << " ";
int num = 0;
//下面这行代码,通过判断祖宗节点(fa[x] == x)个数来判断联通块个数。
for(int i = 0; i < 10010; i++) if(st.count(i)!=0 && fa[i] == i)num++;
cout << num << '\n';
int Q; cin >> Q;
while(Q--)
{
int x, y; cin >> x >> y;
if(find(x) == find(y)) cout << "Y\n";
else cout << "N\n";
}
return 0;
}

  • L2-025 分而治之

include<bits/stdc++.h>

using namespace std;

//从边的角度来考虑,记录边的状态
struct nod{
int x, y;
};
vector edge;

int main()
{
int n, m; cin >> n >> m;
for(int i = 0; i < m; i++)
{
int x, y; cin >> x>> y;
edge.push_back({x,y});
}
int k; cin >> k;
while(k--)
{
map<int,bool> st;//被摧毁
int t; cin >> t;
for(int i = 0; i < t; i++)
{
int x; cin >> x;
st[x] = 1;
}
bool flg = 0;
for(int i = 0; i < edge.size(); i++)
{
if(st.count(edge[i].x) == 1 || st.count(edge[i].y) == 1)
{
continue;
}
flg = 1;
break;
}
if(flg == 1) cout << "NO\n";
else cout << "YES\n";
}
return 0;
}

  • L2-026 小字辈

  • L2-027 名人堂与代金券

include <bits/stdc++.h>

using namespace std;

struct nod
{
int score;
int rank;
string name;
bool operator < (const nod &b) const
{
if(score != b.score) return score > b.score;
else return name < b.name;
}
};
vector dat;
int money = 0;

int main()
{
int n, g, k; cin >> n >> g >> k;
for(int i = 0; i < n; i++)
{
int tempscore;
string tempname;
cin >> tempname >> tempscore;
dat.push_back({tempscore,0,tempname});
if(tempscore >= g) money += 50;
else if(tempscore >= 60)money += 20;
}
sort(dat.begin(), dat.end());
dat[0].rank = 1;
//下面i = 0爆段错误
for(int i = 1 ;i < dat.size(); i++)
{
dat[i].rank = i+1;
if(dat[i].score==dat[i-1].score) dat[i].rank = dat[i-1].rank;
}

cout << money << '\n';
for(int i =0; i <dat.size()&&dat[i].rank<=k; i++)
{
	cout << dat[i].rank<<' '<< dat[i].name<<' '<<dat[i].score<<'\n';
}
return 0;	

}

posted on 2025-04-07 18:56  figvalar  阅读(37)  评论(0)    收藏  举报