2题,97名,T恤到手~
不愧是银联的比赛,密码的安全性很高,整得我自己都快记不住了。。
话说实名认证做晚了,emmm不知道会不会有影响
题目的话难度适中,思路也比较清晰,就是自己代码写得有点挫,WA了好几发-_-
上题解
码队女朋友的王者之路
简单模拟即可,注意净胜场最大可能在赛季
过程中,注意long long
#include<bits/stdc++.h>
#define MAX 105
using namespace std;
typedef long long ll;
string s;
int main()
{
int t,n,m,i,j,k;
scanf("%d",&
t);
while(t--
){
scanf("%d%d%d",&n,&k,&
m);
scanf(" ");
cin>>
s;
ll c=
0,cc=
0,ans=
0;
for(i=
0;i<n;i++
){
if(s[i]==
'1') c++
;
else{
if(k>
0) k--
;
else c--
;
}
cc=
max(cc,c);
}
if(c<
0) printf(
"%lld\n",max(0ll,cc));
else printf(
"%lld\n",max(0ll,c*(m-
1)+
cc));
}
return 0;
}
码队女朋友的王者之路
自学图论的码队弟弟
先用dfs找到奇数环,然后二分确定环内元素的值,最后跑一边bfs找出环外元素的值。
#include<bits/stdc++.h>
#define MAX 100005
using namespace std;
typedef long long ll;
vector<
int>
v[MAX],vv,vvv;
map<
int,map<
int,
int> >
mp;
queue<
int>
q;
int a[MAX],b[MAX],bb[MAX];
int f;
void dfs(
int pre,
int x){
if(f==
1)
return;
for(
int i=
0;i<v[x].size();i++
){
int to=
v[x][i];
if(to==pre)
continue;
if(b[to]){
vv.push_back(to);
f=
1;
return;
}
b[to]=
1;
vv.push_back(to);
dfs(x,to);
if(f==
1)
return;
vv.pop_back();
}
}
int main()
{
int t,n,x,y,z,i,j;
scanf("%d",&
n);
for(i=
1;i<=n;i++
){
scanf("%d%d%d",&x,&y,&
z);
v[x].push_back(y);
v[y].push_back(x);
mp[x][y]=
z;
mp[y][x]=
z;
}
if(n==
1){
printf("%d\n",z);
return 0;
}
f=
0;
b[1]=
1;
vv.push_back(1);
dfs(-
1,
1);
for(i=
0;i<vv.size();i++
){
if(vv[i]==vv[vv.size()-
1]){
for(j=i;j<vv.size();j++
){
vvv.push_back(vv[j]);
}
break;
}
}
// for(i=0;i<vvv.size();i++){
// printf("%d ",vvv[i]);
// }printf("\n");
int l=-
32768,r=
32768,m;
while(l<=
r){
m=(l+r)/
2;
int ff=
0;
a[vvv[0]]=
m;
for(i=
1;i<vvv.size()-
1;i++
){
a[vvv[i]]=mp[vvv[i-
1]][vvv[i]]-a[vvv[i-
1]];
if(a[vvv[i]]<-
32768&&(i&
1)){
ff=
1;
break;
}
else if(a[vvv[i]]<-
32768&&(i%
2==
0)){
ff=
2;
break;
}
else if(a[vvv[i]]>
32768&&(i&
1)){
ff=
2;
break;
}
else if(a[vvv[i]]>
32768&&(i%
2==
0)){
ff=
1;
break;
}
}
if(ff==
1){
r=m-
1;
}
else if(ff==
2){
l=m+
1;
}
else{
int z=mp[vvv[vvv.size()-
2]][vvv[vvv.size()-
1]]-a[vvv[vvv.size()-
2]];
if(z<-
32768){
r=m-
1;
}
else if(z>
32768){
l=m+
1;
}
else if(a[vvv[
0]]==
z){
break;
}
else if(a[vvv[
0]]<
z){
l=m+
1;
}
else{
r=m-
1;
}
}
}
for(i=
0;i<vvv.size()-
1;i++
){
q.push(vvv[i]);
bb[vvv[i]]=
1;
}
while(q.size()){
int p=
q.front();
for(i=
0;i<v[p].size();i++
){
int to=
v[p][i];
if(bb[to])
continue;
bb[to]=
1;
a[to]=mp[p][to]-
a[p];
q.push(to);
}
q.pop();
}
for(i=
1;i<=n;i++
){
printf("%d\n",a[i]);
}
return 0;
}
/*
8
1 2 11
2 3 7
2 4 9
4 5 2
4 6 8
5 7 13
6 8 -1
7 8 -2
*/
自学图论的码队弟弟
折扇染色(非正解)
猜的结论,只能过样例。。正解貌似要用到状态转移
#include<bits/stdc++.h>
#define MAX 500005
#define MOD 1000000007
using namespace std;
typedef long long ll;
ll a[MAX];
int main()
{
int t,i,j,k;
a[1]=
1;
for(i=
2;i<=
500002;i++
){
a[i]=a[i-
1]*i%
MOD;
}
scanf("%d",&
t);
while(t--
){
ll n,m;
scanf("%lld%lld",&n,&
m);
if(m==
4) printf(
"%lld\n",a[m]*n%
MOD);
else if(m>
4) printf(
"%lld\n",a[m+
1]*(n-
1)%
MOD);
else printf(
"%lld\n",a[m-
1]*(n+
1)%
MOD);
}
return 0;
}
折扇染色(非正解)
转载于:https://www.cnblogs.com/yzm10/p/11218461.html
相关资源:数据结构—成绩单生成器