A 映射一下


2015浙江省赛题解_#include2015浙江省赛题解_训练赛系列_02


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
const int N=4e5+10;
const int inf=1e9;
int a[N];
map<int,int> m1;
int main(){
ios::sync_with_stdio(false);
int t;
cin>>t;
while(t--){
int n;
cin>>n;
int i;
m1.clear();
int last=0;
int maxn=0;
int x=-1;
int f=0;
for(i=1;i<=n;i++){
cin>>a[i];
m1[a[i]]++;
if(m1[a[i]]>maxn){
maxn=m1[a[i]];x=a[i];
f=1;
}else if(m1[a[i]]==maxn){
f=0;
}
}
if(!f)puts("Nobody");
else printf("%d\n",x);
}
return 0;
}

View Code

B  预处理+思维


2015浙江省赛题解_#include2015浙江省赛题解_训练赛系列_02


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+5;
int a[32];
int s[N];
int dis[N];
int main(){
int t;
scanf("%d",&t);
while(t--){
memset(a,0,sizeof a);
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&s[i]);
for(int i=1;i<=n;i++){
for(int j=30;j>=0;j--){
if((1<<j)<=s[i]){
a[j]++;
dis[i]=j;
break;
}
}
}
ll sum=0;
for(int i=1;i<=n;i++){
for(int j=dis[i]-1;j>=0;j--){
if(((1<<j)^s[i])>s[i]){
sum+=a[j];
}
}
}
printf("%lld\n",sum);
}
}

View Code

C 凸包

D 按位置算贡献,组合数


2015浙江省赛题解_#include2015浙江省赛题解_训练赛系列_02


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
const int N=4e6+10;
const int inf=1e9;
int a[N];
map<int,int> m1;

int main(){
ios::sync_with_stdio(false);
int t;
cin>>t;
while(t--){
memset(a,0,sizeof a);
ll n;
cin>>n;
ll sum=0;
for(ll i=1;i<=n;i++){
ll x;
cin>>x;
if(a[x]){
sum+=x*(i-a[x])*(n-i+1);
a[x]=i;
}
else{
sum+=x*((n-i+1)*(i));
a[x]=i;
}
}
cout<<sum<<endl;
}
return 0;
}

View Code

G 排序模拟


2015浙江省赛题解_#include2015浙江省赛题解_训练赛系列_02


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
const int N=4e6+10;
const int inf=1e9;
struct node{
string s;
int x;
bool operator <(const node &t) const{
return x<t.x;
}
}s[155];
string tmp[5];
int main(){
ios::sync_with_stdio(false);
int t;
cin>>t;
while(t--){
int ans=0;
int S,M,D;
cin>>S>>M>>D;
int i;
int cnt=0;
for(i=1;i<=S;i++){
string x;
cin>>x;
int num;
cin>>num;
s[++cnt]={x,num};
}
sort(s+1,s+1+cnt);
if(cnt%2){
tmp[1]=s[(cnt+1)/2].s;
ans+=s[cnt/2+1].x;
}
else{
tmp[1]=s[cnt/2+1].s;
ans+=s[cnt/2+1].x;
}
cnt=0;
for(i=1;i<=M;i++){
string x;
cin>>x;
int num;
cin>>num;
s[++cnt]={x,num};
}
sort(s+1,s+1+cnt);
if(cnt%2){
tmp[2]=s[(cnt+1)/2].s;
ans+=s[cnt/2+1].x;
}
else{
tmp[2]=s[cnt/2+1].s;
ans+=s[cnt/2+1].x;
}
cnt=0;
for(i=1;i<=D;i++){
string x;
cin>>x;
int num;
cin>>num;
s[++cnt]={x,num};
}
sort(s+1,s+1+cnt);
if(cnt%2){
tmp[3]=s[(cnt+1)/2].s;
ans+=s[cnt/2+1].x;
}
else{
tmp[3]=s[cnt/2+1].s;
ans+=s[cnt/2+1].x;
}
cout<<ans<<" "<<tmp[1]<<" "<<tmp[2]<<" "<<tmp[3]<<endl;
}
return 0;
}

View Code

H 模拟


2015浙江省赛题解_#include2015浙江省赛题解_训练赛系列_02


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
const int N=4e6+10;
const int inf=1e9;
int a[7]={6,9,6,5,5,5,5};

bool check(int n)
{
if(n%400==0||(n%100!=0&&n%4==0))
return true;
return false;
}

int main(){
//ios::sync_with_stdio(false);
int t;
cin>>t;
while(t--){
int y;
scanf("%d",&y);
int s=y-1928,k=0;
for(int i=1929;i<=y;i++)
{
if(check(i))
k++;
}
printf("%d\n",a[(2+k+s)%7]);
}
return 0;
}

View Code

I  最短路+思维


2015浙江省赛题解_#include2015浙江省赛题解_训练赛系列_02


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
const int N=2e6+10;
const int mod=1e9+7;
int n,m;
char g[550][550];
int sx,sy,ex,ey;
int dx[]={-1,0,1,0};
int dy[]={0,1,0,-1};
vector<pll> num;
int h[N],ne[N],e[N],idx;
int cost[N],w[N];
int st[N];
int dis[N][2];
struct node{
int x,y;
int id;
bool operator <(const node &t) const{
if(x==t.x)
return y>t.y;
return x>t.x;
}
};
void add(int a,int b,int c,int d){
e[idx]=b,ne[idx]=h[a],cost[idx]=c,w[idx]=d,h[a]=idx++;
}
bool check(int x,int y){
if(x>=0&&x<n&&y>=0&&y<m){
if(g[x][y]!='#')
return true;
}
return false;
}
int solve(int x,int y){
int res=0;
if(g[x][y]>='a'&&g[x][y]<='z')
res+=(g[x][y]-'a'+1);
int i;
for(i=0;i<4;i++){
int a=x+dx[i];
int b=y+dy[i];
if(!check(a,b))
continue;
if(g[a][b]>='A'&&g[a][b]<='Z')
res+=(g[a][b]-'A'+1);
}
return res;
}
int get(int a,int b,int c,int d){
int res=solve(c,d);
int i,j;
for(i=0;i<4;i++){
int x=dx[i]+a;
int y=dy[i]+b;
if(check(x,y)){
if(g[x][y]>='A'&&g[x][y]<='Z'){
for(int k=0;k<4;k++){
int tmp1=dx[k]+x;
int tmp2=dy[k]+y;
if(check(tmp1,tmp2)){
if(tmp1==c&&tmp2==d){
res-=(g[x][y]-'A'+1);
}
}
}
}
}
}
return res;
}
void dij(){
int ans1,ans2;
priority_queue<node> q;
q.push({0,0,sx*m+sy});
int i;
for(i=0;i<=n*m;i++){
st[i]=0;
dis[i][1]=0x3f3f3f3f;
dis[i][0]=0x3f3f3f3f;
}
dis[sx*m+sy][0]=dis[sx*m+sy][1]=0;
while(q.size()){
auto t=q.top();
q.pop();
if(st[t.id])
continue;
st[t.id]=1;
if(t.id==ex*m+ey){
ans1=t.x;
ans2=t.y;
break;
}
for(i=h[t.id];i!=-1;i=ne[i]){
int j=e[i];
if(dis[j][0]>dis[t.id][0]+cost[i]){
dis[j][0]=dis[t.id][0]+cost[i];
dis[j][1]=dis[t.id][1]+w[i];
q.push({dis[j][0],dis[j][1],j});
}
else if(dis[j][0]==dis[t.id][0]+cost[i]&&dis[j][1]>dis[t.id][1]+w[i]){
dis[j][1]=dis[t.id][1]+w[i];
q.push({dis[j][0],dis[j][1],j});
}
}
}
printf("%d %d\n",ans1,ans2);
}
int main(){
//ios::sync_with_stdio(false);
int t;
cin>>t;
while(t--){
scanf("%d%d",&n,&m);
int i,j;
idx=0;
for(i=0;i<=n*m;i++){
h[i]=-1;
}
scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
sx--,sy--,ex--,ey--;
for(i=0;i<n;i++)
scanf("%s",g[i]);
for(i=0;i<n;i++){
for(j=0;j<m;j++){
int k;
if(g[i][j]=='#')
continue;
if(g[i][j]>='A'&&g[i][j]<='Z'){
num.clear();
for(k=0;k<4;k++){
int x=i+dx[k];
int y=j+dy[k];
if(check(x,y)){
num.push_back({x,y});
}
}
for(k=0;k<(int)num.size();k++){
for(int l=0;l<(int)num.size();l++){
if(k==l)
continue;
int tmp1=num[k].first*m+num[k].second;
int tmp2=num[l].first*m+num[l].second;
add(tmp1,tmp2,get(num[k].first,num[k].second,num[l].first,num[l].second),2);//计算到下个点的代价
}
}
}
else{
for(int k=0;k<4;k++){
int x=i+dx[k];
int y=j+dy[k];
if(!check(x,y))
continue;
if(g[x][y]>='A'&&g[x][y]<='Z')
continue;
add(i*m+j,x*m+y,solve(x,y),1);
}
}
}
}
dij();
}
return 0;
}

View Code

J 恶心人的题


2015浙江省赛题解_#include2015浙江省赛题解_训练赛系列_02


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
char change(char s){
if(s=='-')return '[';
if(s=='_')return '{';
if(s=='+')return '}';
if(s=='=')return ']';
if(s=='Q')return '\"';
if(s=='q')return '\'';
if(s=='W')return '<';
if(s=='w')return ',';
if(s=='E')return '>';
if(s=='e')return '.';
if(s=='R')return 'P';
if(s=='r')return 'p';
if(s=='T')return 'Y';
if(s=='t')return 'y';
if(s=='Y')return 'F';
if(s=='y')return 'f';
if(s=='U')return 'G';
if(s=='u')return 'g';
if(s=='I')return 'C';
if(s=='i')return 'c';
if(s=='O')return 'R';
if(s=='o')return 'r';
if(s=='P')return 'L';
if(s=='p')return 'l';
if(s=='{')return '?';
if(s=='[')return '/';
if(s=='}')return '+';
if(s==']')return '=';
if(s=='A')return 'A';
if(s=='a')return 'a';
if(s=='S')return 'O';
if(s=='s')return 'o';
if(s=='D')return 'E';
if(s=='d')return 'e';
if(s=='F')return 'U';
if(s=='f')return 'u';
if(s=='G')return 'I';
if(s=='g')return 'i';
if(s=='H')return 'D';
if(s=='h')return 'd';
if(s=='J')return 'H';
if(s=='j')return 'h';
if(s=='K')return 'T';
if(s=='k')return 't';
if(s=='L')return 'N';
if(s=='l')return 'n';
if(s==':')return 'S';
if(s==';')return 's';
if(s=='"')return '_';
if(s=='\'')return '-';
if(s=='Z')return ':';
if(s=='z')return ';';
if(s=='X')return 'Q';
if(s=='x')return 'q';
if(s=='C')return 'J';
if(s=='c')return 'j';
if(s=='V')return 'K';
if(s=='v')return 'k';
if(s=='B')return 'X';
if(s=='b')return 'x';
if(s=='N')return 'B';
if(s=='n')return 'b';
if(s=='M')return 'M';
if(s=='m')return 'm';
if(s=='<')return 'W';
if(s==',')return 'w';
if(s=='>')return 'V';
if(s=='.')return 'v';
if(s=='?')return 'Z';
if(s=='/')return 'z';
return s;


}
string s;
int main(){
while(getline(cin,s))
{
for(int i=0;i<(int)(s.length());i++)
{
printf("%c",change(s[i]));
}
printf("\n");
}
return 0;
}

View Code

K 按规则模拟


2015浙江省赛题解_#include2015浙江省赛题解_训练赛系列_02


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
typedef pair<pll,int> plll;
const int N=1e5+10;
const double eps=1e-5;
int st[N];
map<plll,int> m1;
double f[200];
vector<int> def[200][11];
vector<int> pos[200][11];
struct node{
double x;
int id;
bool operator<(const node &t) const{
return x>t.x;
}
}s[N];
map<int,pair<double,int> > m2;
int main(){
int t;
cin>>t;
while(t--){
int n,q,d,c;
scanf("%d%d%d%d",&n,&q,&d,&c);
int a;
int i;
for(i=1;i<=n;i++){
f[i]=d;
}
while(c--){
scanf("%d",&a);
int i,j;
m1.clear();
m2.clear();
for(i=1;i<=n;i++)
for(j=1;j<=q;j++)
def[i][j].clear();
for(i=1;i<=a;i++){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
if(m1[{{x,y},z}])
continue;
m1[{{x,y},z}]=1;
def[y][z].push_back(x);
}
for(i=1;i<=n;i++){
for(j=1;j<=q;j++){
int num=(int)def[i][j].size();
if(num==0)
continue;
for(auto x:def[i][j]){
f[x]+=1.0*(n-1)/num;
}
f[i]-=(n-1);
}
}
int cnt1=0,cnt2=0;
for(i=1;i<=q;i++){
cnt1=0,cnt2=0;
for(j=1;j<=n;j++)
st[j]=0;
for(j=1;j<=n;j++){
int x;
scanf("%d",&x);
if(x)
cnt1++;
else
cnt2++;
st[j]=x;
}
for(j=1;j<=n;j++){
if(!st[j]){
f[j]-=(n-1);
}
else{
f[j]+=1.0*cnt2*(n-1)/cnt1;
}
}
}
for(i=1;i<=n;i++){
s[i]={f[i],i};
}
sort(s+1,s+1+n);
int pri=1;
m2[s[1].id]={s[1].x,1};
int cnt=1;
for(i=2;i<=n;i++){
if(abs(s[i].x-s[i-1].x)<eps){
m2[s[i].id]={s[i].x,pri};
cnt++;
}
else{
m2[s[i].id]={s[i].x,pri+cnt};
pri+=cnt;
cnt=1;
}
}
int u;
scanf("%d",&u);
for(i=1;i<=u;i++){
int que;
scanf("%d",&que);
auto x=m2[que];
printf("%.8f %d\n",x.first,x.second);
}
}
}
}

View Code

L 签到


2015浙江省赛题解_#include2015浙江省赛题解_训练赛系列_02


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=3e5+10;
const int mod=1e7+7;
int main(){
int t;
scanf("%d",&t);
while(t--){
int n;
scanf("%d",&n);
int op=0;
while(n--){
int x;
scanf("%d",&x);
if(x>6000)op++;
}
printf("%d\n",op);
}
}

View Code

 


没有人不辛苦,只有人不喊疼