A |
做游戏 |
思路:剪刀石头布,对应的布剪刀石头,取最小值就行
1 #include2 using namespace std; 3 typedef long long ll; 4 int main() 5 { 6 ll a,b,c,x,y,z; 7 scanf("%lld%lld%lld%lld%lld%lld",&a,&b,&c,&x,&y,&z); 8 printf("%lld\n",min(a,y)+min(b,z)+min(c,x)); 9 return 0; 10 }
B |
排数字 |
思路:1. 6和1的个数小于2或者1的,不存在
2.1的个数大于6的话,通过规律可发现个数为1的个数减一
3.1的个数小于6的话答案就是1 的个数
1 #include2 using namespace std; 3 int main() 4 { 5 int n; 6 scanf("%d",&n); 7 string s; 8 cin>>s; 9 int _6=0,_1=0; 10 for(int i=0;i 11 { 12 if(s[i]=='6') 13 _6++; 14 else if(s[i]=='1') 15 _1++; 16 } 17 if(_6<2||_1<1) 18 printf("0\n"); 19 else 20 { 21 if(_1>=_6) 22 printf("%d\n",_6-1); 23 else 24 printf("%d\n",_1); 25 } 26 return 0; 27 }
D | 数三角 |
思路:判断任意两边之和大于第三边,这是判断是否能组成三角形,且将三边排序,两个小的平方和大于第三边的平方和就是钝角,相等的话就是直角了
1 #include2 using namespace std; 3 typedef long long ll; 4 const int maxn=1000; 5 const double eps=1e-8; 6 const double PI=acos(-1.0); 7 struct point 8 { 9 int x,y; 10 }p[maxn]; 11 ll Len(point A,point B) 12 { 13 return ((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y)); 14 } 15 int main() 16 { 17 int n; 18 scanf("%d",&n); 19 for(int i=1;i<=n;i++) 20 scanf("%d%d",&p[i].x,&p[i].y); 21 ll length[3]; 22 int num=0; 23 for(int i=1;i<=n-2;i++) { 24 for (int j = i + 1; j <= n-1; j++) { 25 for (int k = j + 1; k <= n; k++) { 26 length[0] = Len(p[i], p[j]); 27 length[1] = Len(p[i], p[k]); 28 length[2] = Len(p[j], p[k]); 29 double a=sqrt(length[0]); 30 double b=sqrt(length[1]); 31 double c=sqrt(length[2]); 32 if(a+b>c&&a+c>b&&b+c>a) 33 { 34 sort(length,length+3); 35 if(length[0]+length[1] 2]) 36 num++; 37 } 38 } 39 } 40 } 41 printf("%d\n",num); 42 return 0; 43 }
E | 做计数 |
思路:两边平方,那么2√(i*j)必然也是整数,那么i*j也就必然是平方数,这样就可以从i=1开始枚举,当i*i<=n结束,i*i%j==0时,j被整除,那么就满足条件
1 #include2 using namespace std; 3 typedef long long ll; 4 const int maxn=4e5+20; 5 int main() 6 { 7 int n; 8 cin>>n; 9 ll cnt=0; 10 for(int i=1;i*i<=n;i++) 11 { 12 ll res=0; 13 for(int j=1;j<=i-1;j++) 14 { 15 if((i*i)%j==0) 16 res++; 17 } 18 cnt+=res*2+1; 19 } 20 cout< 21 return 0; 22 }
F | 拿物品 |
思路:可以优先选择a+b最大的,这样双方拿的和最优,再把编号压入队列就行了
1 #include2 using namespace std; 3 typedef long long ll; 4 const int maxn=2e5+10; 5 struct Po{ 6 int id,a,b; 7 }; 8 bool cmp(Po a,Po b) 9 { 10 return a.a+a.b>b.a+b.b; 11 } 12 queue<int>a,b; 13 int main() 14 { 15 int T; 16 scanf("%d",&T); 17 Po p[maxn]; 18 for(int i=0;i 19 scanf("%d",&p[i].a),p[i].id=i+1; 20 for(int j=0;j 21 scanf("%d",&p[j].b); 22 sort(p,p+T,cmp); 23 for(int i=0;i 24 { 25 if(i&1) 26 b.push(p[i].id); 27 else 28 a.push(p[i].id); 29 } 30 while(!a.empty()) 31 printf("%d ",a.front()),a.pop(); 32 printf("\n"); 33 while(!b.empty()) 34 printf("%d ",b.front()),b.pop(); 35 printf("\n"); 36 return 0; 37 }
G | 判正误 |
思路:快速幂取余即可。。注意模,多摸几次就行了。。。
1 #include2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include11 #include 12 #include 13 #include 14 #include 15 #include 16 using namespace std; 17 typedef long long ll; 18 const ll mod=0x3ffff; 19 const ll NUM=10;//运算次数,Miller_Rabin算法为概率运算,误判率为2^(-NUM); 20 ll t,f[100]; 21 ll quick(ll a, ll b) 22 { 23 int ans = 1; 24 while (b) 25 { 26 if (b & 0x1) 27 ans = ans * a % mod; 28 a = a * a % mod; 29 b >>= 1; 30 } 31 return ans%mod; 32 } 33 int main() 34 { 35 int T; 36 scanf("%d",&T); 37 while(T--){ 38 ll a,b,c,d,e,f,g; 39 scanf("%lld%lld%lld%lld%lld%lld%lld",&a,&b,&c,&d,&e,&f,&g); 40 ll sum=(quick(a,d)+quick(b,e)+quick(c,f))%mod; 41 if(sum!=g%mod) 42 printf("No\n"); 43 else 44 printf("Yes\n"); 45 } 46 return 0; 47 }