A 签到
#include "stdio.h"
int main()
{
printf("zhe\n");
printf("shi\n");
printf("yi\n");
printf("dao\n");
printf("qian\n");
printf("dao\n");
printf("ti\n");
return 0;
}
B 签到2
#include "stdio.h"
#include"math.h"
int main()
{
int x1,y1,r1,x2,y2,r2;
float P;
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d%d%d%d",&x1,&y1,&r1,&x2,&y2,&r2);
P=sqrt(pow((x1-x2),2)+pow((y1-y2),2));
if(abs(r1-r2)<=P&&P<=r1+r2)//
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
c
多举几个例子就能推出来 答案只与x二进制数有几个1和x是否为奇数有关。
- 奇数个1且x为奇的公式是2*1的个数-1 例如19的二进制=10011=5
- 奇数个1且x为奇的公式是2*1的个数+1
- 偶数运行一次便华为了奇数形式
#include"bits/stdc++.h"
using namespace std;
void slove(){
ll x;
scanf("%ld",&x);
ll ans=0;
for(int i=0;i<=100;i++){
if(x<(1<<i))break;
if(x&(1<<i)){
ans++;
}
}
if(ans%2){
printf("%ld\n",2*ans+1-((x&1)?2:0));
}
else {
//cout<<2*(ans-1)+2-((x&1)?2:0)<<endl;
printf("%ld\n",2*(ans-1)+2-((x&1)?2:0));
}
}
int main(){
//js;
int t=1;
scanf("%d",&t);
while(t--)slove();
}
D
考点:思维+进制转换
思路:因为k次方要么不用,要么只能用一次,那么就将每个数都转换为k进制,并且每一位只能用一次,超过一次的就输出no
这题出的太酷了!!! 代码部分:
int cnt[109];
void slove() {
int n, k;
cin >> n >> k;
ll x;
int f = 0;
memset(cnt, 0, sizeof cnt);
for(int i=1;i<=n;i++){
cin >> x;
int p = 0;
while (x > 0&&f==0) {
int y = x % k;
x = x / k;
if (y > 1) { f = 1; break; }//只能用一次,y不能大于1
if (y && cnt[p]) {//已经用过一次了,不能再用了。
f = 1;
break;
}
if (y && cnt[p]) {
f = 1;
break;
}
if (y)cnt[p] = 2;
p++;
}
}
if (f) {
cout << "NO" << endl;
}
else {
cout << "YES" << endl;
}
}
int main() {
js;
int t = 1;
cin>>t;
while (t--)slove();
}
E
数组
#include <stdio.h>
int main()
{
int n,m,k;
scanf("%d %d %d",&n,&k,&m);
int a[100];
int i,temp;
int count=0;
temp=n;
for(i=0;i<n;i++)
{
a[i]=i;//记录位置
}
while(n>1)
{
if(a[k]!=-1)
{
count++;报数
}
if(count==m)
{
a[k]=-1;//出列
count=0;
n--;
}
k++;
if(k==temp)
{
k=0;
}
}
for(i=0;i<temp;i++)
{
if(a[i]!=-1)
{
printf("%d",a[i]);
}
}
return 0;
}
f
模拟
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+5;
int x,y,k;
int main(void)
{
int T;
cin>>T;
while(T--)
{
int n,a,b,d;
int ans=(int)1e9;
cin>>n>>a>>b;
for(int i=1;i<=n;i++)
{
cin>>d>>x>>y;
//cout<<"d: "<<d<<" x: "<<x<<" y: "<<y<<endl;
for(int j=1;j<=d;j++)
{
cin>>k;
int num=k;
//cout<<"k: "<<k<<" ";
if(num>=x)//大于商家卷--
k-=y;
if(num>=a)//大于自己的卷--
k-=b;
//cout<<" after: "<<k<<endl;
ans=min(ans,k);//更新答案
ans=max(0,ans);//保证不为0,商家已经免费请你吃了,总不能还给钱给你吧QAQ
}
}
cout<<ans<<endl;
}
return 0;
}
全部评论
(2) 回帖