http://acm.nyist.me/OJ/contest.php?cid=1033
绝望的riba2534
素数打表
#include
using namespace std;
int a[11000];//素数表
int b[11000];
int main()
{
memset(a,0,sizeof(a));
a[0]=a[1]=1;//0和1都不是素数
for(int i=2;i<=10000;i++)
{
if(a[i]==0)
{
for(int j=i*i;j<=10000;j+=i)
{
a[j]=1;
}
}
}
int n;
while(~scanf("%d",&n))
{
int k=0,o;
for(int i=0;i
scanf("%d",&o);
if(a[o])
{
b[k]=o;
k++;
}
}
sort(b,b+k);
for(int i=0;i
if(i==0)
printf("%d",b[i]);
else
printf(" %d",b[i]);
}
printf("\n");
}
}
CTX学长的01串
#include
using namespace std;
const long long mod=1000000007;
char s[110000];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%s",s);
int k=strlen(s);
long long a=0,b=0,c=0,d=1;
long long sum=0;
for(int i=0;i
if(s[i]=='0')
{
a+=b;
c+=d;
d+=b;
b=0;
}
else if(s[i]=='1')
{
a+=c;
b+=d;
d+=c;
c=0;
}
a%=mod;
b%=mod;
c%=mod;
d%=mod;
}
sum=(a+b+c+d-1)%mod;
printf("%lld\n",sum);
}
}
你说什么?我不会a+b?
可以用大数a+b 也可以用 unsigned long long
#include
using namespace std;
int main()
{
unsigned long long a,b;
while(cin>>a>>b)
{
cout< }
}
我不喊麦,我叫MC李白
因为是奇数个奇数相加 所以 如果n为偶 肯定不行
如果n为奇 为了划分所有数 开头和结尾的数肯定要为奇 不然无法全部划分
如果开头和结尾为奇且n为奇则可以直接选择全部划分为1段
#include
using namespace std;
int main()
{
int t,n;
long long a;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
int o=1;
for(int i=1;i<=n;i++)
{
scanf("%lld",&a);
if(i==1||i==n)//开头和结尾判断就行
{
if(a%2==0)
{
o=0; //有一个为偶就不行
}
}
}
if(n%2==0)
{
printf("No\n");
continue;
}
if(o)
printf("Yes\n");
else
printf("No\n");
}
}
ZXY的万年历
求隔了几天设 ans
比如 2016-02-29 到 2018-02-28
先算2016年过了几天 然后 ans - = 天数
然后算 2017年过了几天 然后 ans + =天数
然后算他们之间的年份 有两年 2016 和2017 然后分别判断是否为闰 为闰+366 不为闰 +365
#include
using namespace std;
int a[15]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int aa(int x)//判断闰年
{
if(x%400==0||x%4==0&&x%100!=0)
return 1;
return 0;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int x1,y1,z1;
int x2,y2,z2;
scanf("%d-%d-%d",&x1,&y1,&z1);
scanf("%d-%d-%d",&x2,&y2,&z2);
int ans=z2-z1;
for(int i=1;i
if(i==2)
{
if(aa(x1))
ans-=29;
else
ans-=28;
}
else
ans-=a[i];
}
for(int i=1;i
if(i==2)
{
if(aa(x2))
ans+=29;
else
ans+=28;
}
else
ans+=a[i];
}
for(int i=x1;i
if(aa(i))
ans+=366;
else
ans+=365;
}
printf("%d\n",ans);
}
}
一种排序
#include
using namespace std;
struct node
{
int x,y,z;//x为编号 ,y 为长 ,z为宽
}a[1100];
int cmp(node a,node b)
{
if(a.x==b.x) //先按编号排
{
if(a.y==b.y) //按长排
return a.z
return a.x
int main()
{
int t,n,x,y,z;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
int kk=0;
for(int i=0;i
scanf("%d%d%d",&a[i].x,&y,&z);
if(y>=z)//长的为矩形的长,短的为宽
{
a[i].y=y;
a[i].z=z;
}
else
{
a[i].y=z;
a[i].z=y;
}
}
sort(a,a+n,cmp);
printf("%d %d %d\n",a[0].x,a[0].y,a[0].z);
for(int i=1;i
if(a[i].x==a[i-1].x&&a[i].y==a[i-1].y&&a[i].z==a[i-1].z)//如果后一个和前一个完全一样 不输出
continue;
printf("%d %d %d\n",a[i].x,a[i].y,a[i].z);
}
}
}
爱玩魔方的ZXY
#include
using namespace std;
char a[110][110];
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=0;i
scanf("%s",a[i]);
}
for(int i=0;i
for(int j=0;j {
if(a[i][j] {
swap(a[i][j],a[j][i]);//交换
}
}
}
for(int i=0;i
printf("%s\n",a[i]);
}
}
}
wjh的生日
#include
using namespace std;
int a[100];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
int ma=0,p=0;
for(int i=0;i
scanf("%d",&a[i]);
ma=max(a[i],ma);
}
for(int i=ma;i>=1;i--)//枚举从最大的蛋糕开始到1为止是否存在一个蛋糕大小能满足分给每个人
{
int k=0;//能分出每块蛋糕大小是 i 的数
for(int j=0;j
k+=(a[j]/i); //看每一部分能分出几个满足要求的蛋糕
}
if(k>=m) //如果分出蛋糕总数大于等于m
{
p=1;
printf("%d\n",i);
break;
}
}
if(p==0)
{
printf("0\n");
}
}
}
幸运的dly学姐
#include
using namespace std;
char a[510];
char b[210];
int main()
{
int n;
while(~scanf("%d",&n))
{
int o=0;
scanf("%s",a);
scanf("%s",b);
for(int i=0;i<=n-4;i++)//遍历长串
{
if(a[i]==b[0]&&a[i+1]==b[1]&&a[i+2]==b[2]&&a[i+3]==b[3])//如果长串中有连续4个完全和所求串相同的部分
{
o=1;
printf("%d\n",i+1);
break;
}
}
if(!o)
printf("NO\n");
}
}
笨笨熊的学习之路——元素周期表
#include
using namespace std;
string aa[12];
char bb[1100][33];
int main()
{
aa[0]="nil",aa[1]="un",aa[2]="bi",aa[3]="tri",aa[4]="quad";
aa[5]="pent",aa[6]="hex",aa[7]="sept",aa[8]="oct",aa[9]="enn";
aa[10]="ium";
for(int i=100;i<=999;i++)
{
int a=i/100;//百位
int b=i/10-a*10;//十位
int c=i%10;//个位
int k=0;
for(int j=0;j
bb[i][k]=aa[a][j];
k++;
}
bb[i][0]-=32; //第一位大写
for(int j=0;j
if(j==0&&bb[i][k-1]==aa[b][0])//前面数字名称的最后一位和后面数字名称的第一位相同,则需去掉一个相同的
continue;
bb[i][k]=aa[b][j];
k++;
}
for(int j=0;j
if(j==0&&bb[i][k-1]==aa[c][0])
continue;
bb[i][k]=aa[c][j];
k++;
}
for(int j=0;j
bb[i][k]=aa[10][j];
k++;
}
}
int t,n,p;
char s[33];
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
if(n==1)
{
scanf("%d",&p);
printf("%s\n",bb[p]);
}
else
{
scanf("%s",s);
for(int i=101;i<1000;i++)
{
if(strcmp(bb[i],s)==0)
{
printf("%d\n",i);
break;
}
}
}
}
}
数字,字母?
#include
using namespace std;
char a[1100];
int main()
{
while(~scanf("%s",a))
{
int k=strlen(a);
for(int i=0;i
if(a[i]>='0'&&a[i]<='9')
printf("%c",a[i]);
}
printf("\n");
}
}