A:签到
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define ls (o<<1)
#define rs (o<<1|1)
#define pb push_back
const double PI= acos(-1.0);
const int M = 1e5+7;
/*
int head[M],cnt;
void init(){cnt=0,memset(head,-1,sizeof(head));}
struct EDGE{int to,nxt,val;}ee[M*2];
void add(int x,int y){ee[++cnt].nxt=head[x],ee[cnt].to=y,head[x]=cnt;}
*/
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin>>t;
while(t--)
{
int a,b,c;
cin>>a>>b>>c;
int nm=0;
if(a>=10)nm++;
if(b>=10)nm++;
if(c>=10)nm++;
cout<<a<<" "<<b<<" "<<c<<endl;
if(nm==0)cout<<"zilch"<<endl;
else if(nm==1)cout<<"double"<<endl;
else if(nm==2)cout<<"double-double"<<endl;
else cout<<"triple-double"<<endl;
cout<<endl;
}
return 0;
}
B:模拟
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define ls (o<<1)
#define rs (o<<1|1)
#define pb push_back
const double PI= acos(-1.0);
const int M = 1e5+7;
/*
int head[M],cnt;
void init(){cnt=0,memset(head,-1,sizeof(head));}
struct EDGE{int to,nxt,val;}ee[M*2];
void add(int x,int y){ee[++cnt].nxt=head[x],ee[cnt].to=y,head[x]=cnt;}
*/
map<char,char>mp;
int main()
{
int t;
cin>>t;
for(int ca=1;ca<=t;ca++)
{
mp.clear();
int n;
char a[3],b[3];
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%s%s",a,b),mp[a[0]]=b[0],mp[b[0]]=a[0];
int q;
scanf("%d",&q);
printf("Test case #%d:\n",ca);
while(q--)
{
char s[100];
scanf("%s",s);
bool f=true;int len=strlen(s);
for(int i=0;i<len;i++)
{
if(s[i]==s[len-i-1]||mp[s[i]]==s[len-i-1])continue;
else {
f=false;
break;
}
}
printf("%s ",s);
if(f)puts("YES");
else puts("NO");
}
puts("");
}
return 0;
}
C:DFS判一下即可
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define ls (o<<1)
#define rs (o<<1|1)
#define pb push_back
const double PI= acos(-1.0);
const int M = 1e5+7;
/*
int head[M],cnt;
void init(){cnt=0,memset(head,-1,sizeof(head));}
struct EDGE{int to,nxt,val;}ee[M*2];
void add(int x,int y){ee[++cnt].nxt=head[x],ee[cnt].to=y,head[x]=cnt;}
*/
int vx[55],vy[55];
int a[55][55];
int n;
void dfs(int x,int y)
{
if(x<1||y<1||x>n||y>n)return ;
if(a[x][y]==0)return ;
if(vx[x]==1&&vy[y]==1)
{
a[x][y]=1;//x,y被敲掉
dfs(x+1,y);
dfs(x-1,y);
dfs(x,y+1);
dfs(x,y-1);
}
}
int main()
{
int t,q,x,y;
cin>>t;
for(int ca=1;ca<=t;ca++)
{
scanf("%d%d",&n,&q);
memset(a,0,sizeof(a));
memset(vx,0,sizeof(vx));
memset(vy,0,sizeof(vy));
int nm=0;
while(q--)
{
scanf("%d%d",&x,&y);
if(vx[x]&&vy[y])//x行,y列都不是完整的
nm++;
else vx[x]=1,vy[y]=1,dfs(x,y);
}
printf("Strategy #%d: %d\n\n",ca,nm);
}
return 0;
}
D:注意女儿在听完她喜欢的歌刚好走是不会重复播放的
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define ls (o<<1)
#define rs (o<<1|1)
#define pb push_back
const double PI= acos(-1.0);
const int M = 1e5+7;
/*
int head[M],cnt;
void init(){cnt=0,memset(head,-1,sizeof(head));}
struct EDGE{int to,nxt,val;}ee[M*2];
void add(int x,int y){ee[++cnt].nxt=head[x],ee[cnt].to=y,head[x]=cnt;}
*/
ll a[M];
int main()
{
int t;
scanf("%d",&t);
for(int ca=1;ca<=t;ca++)
{
int n,k;
scanf("%d%d",&n,&k);
ll sm=0;
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
sm+=a[i];
}
int q;
scanf("%d",&q);
printf("CD #%d:\n",ca);
while(q--)
{
int z;
scanf("%d",&z);
ll ans=0,lst=0;
for(int i=1;i<=z;i++)
{
ll x;
scanf("%lld",&x);
if(i&1)ans+=x,lst=x;
else
{
if(sm==0)continue;
ll tp=lst%a[k];
if(tp==0)tp+=a[k];
x+=tp;
//cout<<"----- "<<a[i]<<" "<<sm<<endl;
ans-=tp;
ans+=x/sm*a[k];
x%=sm;
ans+=min(a[k],x);
}
}
if(a[k]==0)ans=0;
printf("%lld\n",ans);
}
puts("");
}
return 0;
}
E:模拟暴力就行
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define ls (o<<1)
#define rs (o<<1|1)
#define pb push_back
const double PI= acos(-1.0);
const int M = 1e5+7;
/*
int head[M],cnt;
void init(){cnt=0,memset(head,-1,sizeof(head));}
struct EDGE{int to,nxt,val;}ee[M*2];
void add(int x,int y){ee[++cnt].nxt=head[x],ee[cnt].to=y,head[x]=cnt;}
*/
char s[110][110];
int main()
{
int t;
cin>>t;
for(int ca=1;ca<=t;ca++)
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)scanf("%s",s[i]+1);
int q;
scanf("%d",&q);
printf("Word search puzzle #%d:\n",ca);
while(q--)
{
scanf("%s",s[0]);
int len=strlen(s[0]);
bool f=false;
for(int j=1;j<=n;j++)
for(int k=1;k<=m;k++)
{
if(f)break;
int a=0,b=0,c=0,d=0;//上下左右
if(s[j][k]==s[0][0])
{
a=b=c=d=1;
for(int l=0;l<len;l++)
{
if(s[j-l%n<=0?n+j-l%n:j-l%n][k]!=s[0][l])a=0;
if(s[j+l%n>=n+1?j+l%n-n:j+l%n][k]!=s[0][l])b=0;
if(s[j][k-l%m<=0?m+k-l%m:k-l%m]!=s[0][l])c=0;
if(s[j][k+l%m>=m+1?k+l%m-m:k+l%m]!=s[0][l])d=0;
}
}
f=true;
if(a)printf("U %d %d %s\n",j,k,s[0]);
else if(b)printf("D %d %d %s\n",j,k,s[0]);
else if(c)printf("L %d %d %s\n",j,k,s[0]);
else if(d)printf("R %d %d %s\n",j,k,s[0]);
else f=false;
}
}
puts("");
}
return 0;
}
F:N^2枚举AB,ON找CM
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define ls (o<<1)
#define rs (o<<1|1)
#define pb push_back
const double PI= acos(-1.0);
const double eps=1e-6;
const int M = 1e5+7;
/*
int head[M],cnt;
void init(){cnt=0,memset(head,-1,sizeof(head));}
struct EDGE{int to,nxt,val;}ee[M*2];
void add(int x,int y){ee[++cnt].nxt=head[x],ee[cnt].to=y,head[x]=cnt;}
*/
struct point{
double x,y;
}p[110];
bool cp(double a,double b)
{
if(fabs(a-b)<=eps)return 1;
return 0;
}
double dis(point p1,point p2){
return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
}
#define zero(x) (((x)>0?(x):-(x))<eps)
int perpendicular(point u1,point u2,point v1,point v2){
return zero((u1.x-u2.x)*(v1.x-v2.x)+(u1.y-u2.y)*(v1.y-v2.y));
}
int main()
{
int t;
cin>>t;
for(int ca=1;ca<=t;ca++)
{
int n,nm=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%lf%lf",&p[i].x,&p[i].y);
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
{
point md=point{(p[i].x+p[j].x)/2,(p[i].y+p[j].y)/2};
double len=dis(p[i],p[j]);
bool f=false;
int tp=0;
for(int k=1;k<=n;k++)
{
if(i==k||j==k)continue;
if(cp(md.x,p[k].x)&&cp(md.y,p[k].y))f=true;
//cout<<i<<" "<<j<<" "<<f<<" "<<endl;
if(cp(dis(p[k],md),len))
{
if(perpendicular(md,p[k],p[i],p[j]))
tp++;
}
}
if(f)nm+=tp;
}
printf("Set #%d: %d\n\n",ca,nm);
}
return 0;
}
H:枚举除数i,j ,剪枝后到可行复杂度
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define ls (o<<1)
#define rs (o<<1|1)
#define pb push_back
const double PI= acos(-1.0);
const double eps=1e-6;
const int M = 1e7+7;
/*
int head[M],cnt;
void init(){cnt=0,memset(head,-1,sizeof(head));}
struct EDGE{int to,nxt,val;}ee[M*2];
void add(int x,int y){ee[++cnt].nxt=head[x],ee[cnt].to=y,head[x]=cnt;}
*/
int a[M];
int main()
{
int t;
cin>>t;
for(int ca=1;ca<=t;ca++)
{
ll ans=0;
int n ,x,mx=0;
scanf("%d",&n);
memset(a,0,sizeof(a));
for(int i=1;i<=n;i++)scanf("%d",&x),a[x]++,mx=max(mx,x);
int sz=mx;
ans+=(ll)a[0]*(n-a[0])+(ll)a[1]*(n-a[0]-a[1]);//先把0,1算出来,省一点时间
for(int i=2;i<=sz;i++)
{
if(a[i])//剪枝后最坏情况是: sz*loglogsz
for(int j=2;j<=sz/i;j++)
ans+=(ll)a[i]*a[j*i];
}
printf("Test case #%d: %lld\n\n",ca,ans);
}
return 0;
}