A - Ace of Aces
题意:数字代表选的那个人,票数最多的当选,如果出现最高票有多个人,否则输出Nobody
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<stack>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#include<cstdlib>
#include<queue>
#define mod 1e9+7
#define ll long long
#define MAXSIZE 100005
int a[1005];
using namespace std;
int main()
{
int t;
cin>>t;
while(t--){
int n;
cin>>n;
memset(a,0,sizeof(a));
for(int i=0;i<n;i++){
int x;
cin>>x;
a[x]++;
}
int maxnum=0,pos,flag=0;
for(int i=1;i<=1000;i++){
if(a[i]>maxnum){
maxnum=a[i];
pos=i;
}
}
for(int i=1;i<=1000;i++){
if(a[i]==maxnum&&pos!=i){
flag=1;
break;
}
}
if(flag)
cout<<"Nobody"<<endl;
else cout<<pos<<endl;
}
return 0;
}
B - Team Formation
题意:每个人都有各自的能力值,如果两个人的能力值异或之后大于他俩,那么就是一个成功的配对,求总配对数.关键点就是开出数组来保存他们二进制中第一个1的位置,然后每次比较较小的数中的第一个1位置在较大数中对应位的异或值,
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<stack>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#include<cstdlib>
#include<queue>
#define mod 1e9+7
#define ll long long
#define MAXSIZE 100005
int a[100005];
int pos[100005];//最高位
int b[35];//某最高位的个数
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int n,ans=0;
cin>>n;
memset(b,0,sizeof(b));
for(int i=0; i<n; i++)
cin>>a[i];
sort(a,a+n);
for(int i=0; i<n; i++)
{
for(int j=31; j>=0; j--)
{
if(a[i]&(1<<j))
{
pos[i]=j;
b[j]++;
break;
}
}
}
for(int i=0; i<n; i++)
{
int j=pos[i];
while(j>=0)
{
if(!(a[i]&(1<<j)))
ans+=b[j];
j--;
}
//cout<<ans<<endl;
}
cout<<ans<<endl;
}
return 0;
}
C- Convex Hull(凸包)
挖坑待填
D - Beauty of Array
题意:给出一串数组,取其中连续子串,元素求和就是该数字串的beauty值.求整体beauty值.
关键在于记录数字位置,当一个数未出现过,那么这个数对先前所有子串都有贡献(也就是可以在先前所有字串中加入这一元素),如果出现过,那么只对当前位置与先前位置之间的子串有贡献.
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<stack>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#include<cstdlib>
#include<queue>
#define mod 1e9+7
#define ll long long
#define MAXSIZE 100005
int a[1000005];
int numpos[1000005];
ll int temp[1000005];
using namespace std;
int main()
{
int t,n;
cin>>t;
while(t--)
{
ll ans=0;
memset(numpos,-1,sizeof(numpos));
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n;i++){
ans+=a[i];
if(numpos[a[i]]==-1){
numpos[a[i]]=i;
ans+=a[i]*i;
}
else {
ans+=a[i]*(i-numpos[a[i]]-1);
numpos[a[i]]=i;
}
temp[i]=ans;
}
ans=0;
for(int i=0;i<n;i++)
ans+=temp[i];
cout<<ans<<endl;
}
return 0;
}
E - Floor Function
这道题题解暂时还未找到
F - Permutation Graph
挖坑待填
G - Lunch Time
题意:有三种,每种选一个中等价格的.求价格总和,再输出各个菜,其实就是定义结构,然后排序,直接定位出中位数
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<stack>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<map>
#define mod 1e9+7
#define ll long long
#define MAXSIZE 100005
struct Node
{
char s[60];
int num;
}x[120],y[120],z[120];
bool cmp(Node a,Node b)
{
return a.num < b.num;
}
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
memset(x,0,sizeof(x));
memset(y,0,sizeof(y));
memset(z,0,sizeof(z));
int s,m,d;
int total;
cin>>s>>m>>d;
for(int i=0;i<s;++i)
cin>>x[i].s>>x[i].num;
sort(x,x+s,cmp);
for(int i=0;i<m;++i)
cin>>y[i].s>>y[i].num;
sort(y,y+m,cmp);
for(int i=0;i<d;++i)
cin>>z[i].s>>z[i].num;
sort(z,z+d,cmp);
total = x[s/2].num + y[m/2].num + z[d/2].num;
cout<<total<<" "<<x[s/2].s<<" "<< y[m/2].s <<" "<< z[d/2].s <<endl;
}
return 0;
}
H - May Day Holiday
题意:问五一假期有多少天,其实无非就7个答案,然后先算出1928,然后在一年年推,非常快
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<stack>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#include<cstdlib>
#include<map>
#define mod 1e9+7
#define ll long long
#define MAXSIZE 100005
using namespace std;
int day[]={6,9,6,5,5,5,5};
int leap(int y)
{
if(y%400==0 || (y%4==0&&y%100!=0))
return 1;
return 0;
}
int main(){
int t,n;
cin>>t;
while(t--){
cin>>n;
int d=2,y=1928;
if(n==y)
cout<<day[d]<<endl;
else {
while(n>y){
y++;
if(leap(y))
d+=366;
else d+=365;
d%=7;
}
cout<<day[d]<<endl;
}
}
return 0;
}
I - Earthstone Keeper
挖坑待填
J - Convert QWERTY to Dvorak
题意:直接map
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<stack>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#include<cstdlib>
#include<map>
#define mod 1e9+7
#define ll long long
#define MAXSIZE 100005
int a[1005];
using namespace std;
int main()
{
map<char,char>mp;
mp['_'] = '{';
mp['-'] = '[';
mp['+'] = '}';
mp['='] = ']';
mp['Q'] = '"';
mp['q'] = '\'';
mp['W'] = '<';
mp['w'] = ',';
mp['E'] = '>';
mp['e'] = '.';
mp['R'] = 'P';
mp['r'] = 'p';
mp['T'] = 'Y';
mp['t'] = 'y';
mp['Y'] = 'F';
mp['y'] = 'f';
mp['U'] = 'G';
mp['u'] = 'g';
mp['I'] = 'C';
mp['i'] = 'c';
mp['O'] = 'R';
mp['o'] = 'r';
mp['P'] = 'L';
mp['p'] = 'l';
mp['{'] = '?';
mp['['] = '/';
mp['}'] = '+';
mp[']'] = '=';
mp['S'] = 'O';
mp['s'] = 'o';
mp['D'] = 'E';
mp['d'] = 'e';
mp['F'] = 'U';
mp['f'] = 'u';
mp['G'] = 'I';
mp['g'] = 'i';
mp['H'] = 'D';
mp['h'] = 'd';
mp['J'] = 'H';
mp['j'] = 'h';
mp['K'] = 'T';
mp['k'] = 't';
mp['L'] = 'N';
mp['l'] = 'n';
mp[':'] = 'S';
mp[';'] = 's';
mp['"'] = '_';
mp['\''] = '-';
mp['Z'] = ':';
mp['z'] = ';';
mp['X'] = 'Q';
mp['x'] = 'q';
mp['C'] = 'J';
mp['c'] = 'j';
mp['V'] = 'K';
mp['v'] = 'k';
mp['B'] = 'X';
mp['b'] = 'x';
mp['N'] = 'B';
mp['n'] = 'b';
mp['<'] = 'W';
mp[','] = 'w';
mp['>'] = 'V';
mp['.'] = 'v';
mp['?'] = 'Z';
mp['/'] = 'z';
string s;
while(getline(cin,s))
{
for(int i = 0;i<s.size();++i)
{
if(mp.find(s[i]) != mp.end())
s[i] = mp[s[i]];
}
cout<<s<<endl;
}
return 0;
}
K - Capture the Flag
题意:模拟
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<stack>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#include<cstdlib>
#include<map>
#define mod 1e9+7
#define ll long long
#define MAXSIZE 100005
using namespace std;
int n,q,p,c;
struct team
{
int id;
int ranklist;
double score;
} a[105];
int vis[105][105][15],defen[105];
bool cmp1(team x,team y){
return x.score>y.score;
}
bool cmp2(team x,team y){
return x.id<y.id;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d%d",&n,&q,&p,&c);
for(int i=1; i<=n; i++) //初始化
{
a[i].id=i;
a[i].ranklist=1;
a[i].score=p;
}
while(c--)//攻击
{
int k;
memset(vis,0,sizeof(vis));
scanf("%d",&k);//攻击方式
while(k--)
{
int atk,def,sev;
scanf("%d%d%d",&atk,&def,&sev);
if(vis[atk][def][sev])
continue;
vis[atk][def][sev]=1;
}
int cnt;
double av;
for(int k=1; k<=q; k++)
{
for(int j=1; j<=n; j++)
{
cnt=0;
for(int i=1; i<=n; i++)//统计攻击
if(vis[i][j][k])
cnt++;
if(cnt==0)
continue;
a[j].score-=(n-1);
av=(n-1)*1.0/cnt;
for(int i=1; i<=n; i++)//加回去
if(vis[i][j][k])
a[i].score+=av;
}
}
int z;
for(int i=1; i<=q; i++)//每个服务器防御
{
memset(defen,0,sizeof(defen));
cnt=0;
for(int j=1; j<=n; j++)//每个队伍
{
scanf("%d",&z);
if(z==1)
{
defen[j]=1;//有防御的标记,统计
cnt++;
}
else
{
defen[j]=0;//没防御的直接减掉
a[j].score-=(n-1);
}
}
if(cnt==n)
continue;
av=(n-1)*1.0/cnt;
av=av*(n-cnt);
for(int j=1; j<=n; j++)//加上去
{
if(defen[j])
a[j].score+=av;
}
}
sort(a+1,a+1+n,cmp1);//按分数排名定rank
a[1].ranklist=1;
for(int j=2;j<=n;j++){
if(fabs(a[j].score-a[j-1].score)<0.000001)
a[j].ranklist=a[j-1].ranklist;
else a[j].ranklist=j;
}
sort(a+1,a+1+n,cmp2);//按id排名给出询问结果
int ques,ask;
scanf("%d",&ques);
for(int j=0;j<ques;j++){
scanf("%d",&ask);
printf("%.10lf %d\n",a[ask].score,a[ask].ranklist);
}
}
}
return 0;
}
L - Demacia of the Ancients
题意:找大于6000的数
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<stack>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#include<cstdlib>
#include<queue>
#define mod 1e9+7
#define ll long long
#define MAXSIZE 100005
using namespace std;
int main()
{
int t;
cin >>t;
while(t--)
{
int n,x;
int ans = 0;
scanf("%d",&n);
for(int i = 0;i<n;++i)
{
scanf("%d",&x);
if(x > 6000)
ans++;
}
cout<<ans<<endl;
}
return 0;
}