UESTC 924-933
10题 ,AC 8题
A - Alphabet Cookies UESTC - 924
水题
B - Sequential game UESTC - 925
队友写的
#include <bits/stdc++.h>
typedef long long int LL;
using namespace std;
char a[1500000];
int main()
{
while(~scanf("%s",a))
{
int n=strlen(a);
int cont0,cont1;
cont0=0,cont1=0;
if(a[0]=='0')cont0++;
else cont1++;
for(int i=1;i<n;i++)
{
if(a[i]==a[i-1])
{
if(a[i]=='0')cont0++;
else cont1++;
}
else
{
swap(cont0,cont1);
if(a[i]=='0')cont0++;
else cont1++;
}
}
printf("%d %d\n",cont0,cont1);
}
}
C - Programming Contest Ranking UESTC - 926
简单模拟
#include <bits/stdc++.h>
#define mme(i,j) memset(i,j,sizeof(i));
using namespace std;
struct group{
char name[35];
int ac;
int total;
int weight;
int po[22];
int potme[26];
int acnum[26];
}gg[205];
int pro[25];
int protime[25];
int n,m;
char s[205];
void input(){
for(int i=1;i<=n;i++)
{
gg[i].ac=gg[i].total=gg[i].weight=0;
mme(gg[i].po,0);
mme(gg[i].potme,0);
mme(gg[i].acnum,0);
scanf("%s",gg[i].name);
for(int j=1;j<=m;j++){
scanf("%s",s);
int k=0,tme=0;
int num=0;
while(s[k]!='\\' ){
if(s[k]>='0'&&s[k]<='9')
{
num=num*10;
num=num+s[k]-'0';
}
k++;
}
k++;
bool fl=0;
while(s[k]){
if(s[k]=='-')
{
fl=1;
break;
}
tme=tme*10;
if(s[k]!='-')
tme=tme+s[k]-'0';
k++;
}
if(fl==0){
pro[j]++;
gg[i].ac++;
if(protime[j]==-1)
protime[j]=tme;
else
protime[j]=min(protime[j],tme);
gg[i].po[j]=1;
gg[i].acnum[j]=num;
gg[i].potme[j]=tme;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(gg[i].potme[j]==protime[j] )
gg[i].total+=gg[i].potme[j];
else
{
if(gg[i].acnum[j]>0)
gg[i].total+=(gg[i].acnum[j]-1)*20;
gg[i].total+=gg[i].potme[j];
}
}
}
for(int i=1;i<=m;i++)
{
if(pro[i])
pro[i]=n/pro[i]; // pro is every problem 's weight
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
gg[i].weight+=gg[i].po[j]*pro[j];
}
int cmp(group a1,group a2)
{
if(a1.ac==a2.ac){
if(a1.total==a2.total){
if(a1.weight == a2.weight)
return strcmp(a1.name,a2.name)<0;
return a1.weight>a2.weight;
}
return a1.total<a2.total;
}
return a1.ac>a2.ac;
}
int rk[222];
int main(){
while(~scanf("%d%d",&n,&m))
{
mme(pro,0);
mme(protime,-1);
input();
sort(gg+1,gg+1+n,cmp);
rk[1]=1;
for(int i=1;i<=n;i++)
{
if(i>1){
if(gg[i].ac==gg[i-1].ac
&&gg[i].total==gg[i-1].total
&&gg[i].weight==gg[i-1].weight)
rk[i]=rk[i-1];
else rk[i]=i;
}
printf("%*d %*s %*d %*d %*d\n",3,rk[i],20,gg[i].name,2,gg[i].ac,6,gg[i].total,4,gg[i].weight);
}
}
return 0;
D - Dart game UESTC - 927
DP题,没补完,待完善
E - Similar Word UESTC - 928
字符串最小表示法
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
char a[150000];
char bb[150000];
int n;
int minRepresentation(char b[])
{
int l=n;
int i = 0, j = 1, k = 0, t;
while(i < l && j < l && k < l) {
t = b[(i + k) >= l ? i + k - l : i + k] - b[(j + k) >= l ? j + k - l : j + k];
if(!t) k++;
else{
if(t > 0) i = i + k + 1;
else j = j + k + 1;
if(i == j) ++ j;
k = 0;
}
}
return (i < j ? i : j);
}
int main()
{
while(~scanf("%s%s",a,bb))
{
if(strcmp(a,bb)==0)
{
printf("no\n");
continue;
}
if(strlen(a)!=strlen(bb))
{
printf("no\n");
continue;
}
int flag=0;
n=strlen(a);
int posa=minRepresentation(a);
int posb=minRepresentation(bb);
for(int i=0;i<n;i++)
{
if(a[posa]!=bb[posb])flag=1;
posa++;
posb++;
posa%=n;
posb%=n;
}
if(flag==0)
printf("yes\n");
else printf("no\n");
}
}
F - Post office UESTC - 929
队友做的,我赛后补了这题。
#include <bits/stdc++.h>
#define mme(i,j) memset(i,j,sizeof(i))
#define maxs 2020
using namespace std;
long long sum[maxs],sum2[maxs];
int a[maxs];
int main(){
int n,m;
while(~scanf("%d",&n))
{
mme(sum,0);
mme(sum2,0);
sum[0]=0;
sum2[n+1]=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
sum[i]=sum[i-1] + a[i];
}
for(int i=n;i>=1;i--)
sum2[i]=sum2[i+1]+a[i];
int p,x,y;
scanf("%d",&p);
while(p--){
scanf("%d%d",&x,&y);
int mid =(x+y)>>1;
long long ans = a[mid]*(mid-x) - (sum[mid-1]-sum[x-1]) + (sum2[mid+1]-sum2[y+1])-a[mid]*(y-mid);
printf("%lld\n",ans);
}
}
return 0;
}
G - Lucky Boy UESTC - 930
计算题,博弈
先判断有没有3点共线的,有就a胜利,反之就是巴士博弈,k=2
#include <bits/stdc++.h>
typedef long long int LL;
using namespace std;
const int N = 10000 +7;
map<int,map<int,int> >mmp;
int x[N],y[N];
int main() {
int n;
while(~scanf("%d",&n)) {
for(int i=1; i<=n; i++) scanf("%d%d",&x[i],&y[i]);
int flag = 0,xx,yy,t; // equal;
for(int i=1; i<=n; i++) {
mmp.clear();
for(int j=1; j<=n; j++) {
if(i==j) continue;
if(x[i]==x[j]&&y[i]==y[j]) flag=1;
xx=x[i]-x[j];
yy=y[i]-y[j];
if(xx<0) xx*=-1,yy*=-1;
t=__gcd(xx,yy);
xx/=t,yy/=t;
if(mmp[xx][yy]) flag=1;
mmp[xx][yy]=1;
}
}
if(flag ) {
printf("a");
} else {
if(n%(3)==0) printf("b");
else printf("a");
}
puts(" is the lucky boy.");
}
return 0;
}
H - Car race game UESTC - 931
线段树骚操作
#include <bits/stdc++.h>
#define lowbit(x) (x&(-x))
#define mme(i,j) memset(i,j,sizeof(i))
using namespace std;
struct node
{
int x,v;
}a[100005];
int sum[100005];
void update(int i,int k)
{
for(;i<100005;i+=lowbit(i))
sum[i]+=k;
}
int cmp(node s,node sb)
{
if(s.x==sb.x)
return s.v<sb.v;
else
return s.x>sb.x;
}
int getsum(int i)
{
int ans=0;
for(;i;i-=lowbit(i))
ans+=sum[i];
return ans;
}
int main(){
int n;
while(~scanf("%d",&n))
{
mme(sum,0);
for(int i=1;i<=n;i++)
scanf("%d%d",&a[i].x,&a[i].v);
sort(a+1,a+1+n,cmp);
long long ans=0;
for(int i=1;i<=n;i++)
{
ans=ans+getsum(a[i].v-1);
update(a[i].v,1);
}
cout<<ans<<endl;
}
return 0;
}
J - The minimum square sum UESTC - 933
规律题
#include <bits/stdc++.h>
#define mme(i,j) memset(i,j,sizeof(i))
using namespace std;
#define maxs 202020
int main()
{
long long int m,n;
while(~scanf("%lld",&n))
{
if(n%4==3)
cout<<n*n*2<<endl;
else
cout<<n<<endl;
}
return 0;
}
我还是太菜了,还需要加强训练,好多思维没有建立起来,导致做题速度明显比队友慢了很多。加油!