一子落阵定杀伐
拨乱满盘局中沙
阳春雪纷繁落入谁人家
曲高和者寡
A
思路:签到题,白给
/* Author: 张皓南 Result: AC Submission_id: 2506410 Created at: Fri Apr 17 2020 20:08:07 GMT+0800 (China Standard Time) Problem_id: 3261 Time: 4 Memory: 1608 */
#include <stdio.h>
int n,x,y,k,cha;
int main(){
while(scanf("%d%d%d%d",&n,&x,&y,&k)==4){
cha=k+n-x;
cha=cha%7;
cha+=y;
cha=cha%7;
//printf("%d\n",cha);
if(cha==4)puts("Thursday");
else if(cha==3)puts("Wednesday");
else if(cha==2)puts("Tuesday");
else if(cha==5)puts("Friday");
else if(cha==1)puts("Monday");
else if(cha==0)puts("Sunday");
else if(cha==6)puts("Saturday");
}
return 0;
}
B
思路:排序板子题,这都不会退学吧
/* Author: 张皓南 Result: AC Submission_id: 2504095 Created at: Fri Apr 17 2020 19:26:23 GMT+0800 (China Standard Time) Problem_id: 3255 Time: 6 Memory: 1676 */
#include <stdio.h>
int n,a,j,tmp,i;
int zhn[1005];
int main(){
n=0;
while(scanf("%d",&a)==1){
n++;
zhn[n]=a;
}
for(i=1;i<=n;i++){
for(j=i+1;j<=n;j++){
if(zhn[i]>zhn[j]){
tmp=zhn[i];
zhn[i]=zhn[j];
zhn[j]=tmp;
}
}
}
for(i=1;i<=n;i++){
printf("%d ",zhn[i]);
}
return 0;
}
C
思路:模拟,白给
/* Author: 张皓南 Result: AC Submission_id: 2503316 Created at: Fri Apr 17 2020 19:14:39 GMT+0800 (China Standard Time) Problem_id: 3267 Time: 4 Memory: 1732 */
#include <stdio.h>
int n,m,i,j;
int zhn[105][10]; //第i个傻子第j次考试分数
int fen[105];//每次考试的分数
int lgr[10];//lgr这么狠,一定代表优秀人数
int main(){
scanf("%d%d",&m,&n);
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
scanf("%d",&zhn[i][j]);
fen[j]+=zhn[i][j];
}
}
for(i=1;i<=n;i++)printf("%.2lf ",(double)(fen[i])/m);
printf("\n");
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
if(zhn[i][j]>=80){
lgr[j]++;
}
}
}
for(i=1;i<=n;i++) printf("%.2lf%% ",(double)(lgr[i])/m*100.0);
printf("\n");
double cs=0;
for(i=1;i<=m;i++){
cs=0.000;
for(j=1;j<=n;j++){
cs+=(double)(zhn[i][j])*1.00;
}
printf("%.2lf\n",cs/n);
}
return 0;
}
D
思路:字符串什么的最墨迹了呜呜呜,阔以学习提下这个isspace函数的用法,好像是在ctype.h这个库里面(库里牛逼)这个东西是用来判断是不是空字符的,非常好用的说嘿嘿,好多这种函数,你们阔以自己探索。
/* Author: 张皓南 Result: AC Submission_id: 2509790 Created at: Fri Apr 17 2020 21:41:22 GMT+0800 (China Standard Time) Problem_id: 3253 Time: 14 Memory: 1668 */
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char zhn[100005];
char lgr[100005];
int ans,i;
int main(){
ans=0;
while(gets(zhn)!=NULL){
int len=strlen(zhn);
for(i=len-1;isspace(zhn[i]);i--) zhn[i+1]='\0';
len=i+1;
if(len>=ans){
ans=len;
for(i=0;i<len;i++) lgr[i]=zhn[i];
}
}
printf("%d ",ans);
for(i=0;i<=ans-1;i++) printf("%c",lgr[i]);
printf("#END");
return 0;
}
E
思路:这题也挺白给的(白给你还错两次,傻子实锤了)
俺为什么会错呢,我没给0设置初值呜呜呜。注意初值设定么么哒
(好像当年我就打过100万的表被人揍了呜呜呜
*
Author: 张皓南
Result: AC Submission_id: 2511160
Created at: Fri Apr 17 2020 23:02:18 GMT+0800 (China Standard Time)
Problem_id: 3106 Time: 125 Memory: 17300
*/
#include <stdio.h>
int modd=1000003,i,q,n;
long long jc[1000055];
long long zhn[1000055];
int main(){
jc[1]=1;
jc[0]=0;
zhn[0]=1;
zhn[1]=2;
for(i=2;i<=1000000;i++) {
jc[i]=(jc[i-1]%modd*i%modd)%modd;
zhn[i]=(zhn[i-1]%modd+jc[i]%modd)%modd;
}
scanf("%d",&q);
while(q--){
scanf("%d",&n);
printf("%lld\n",zhn[n]);
}
return 0;
}
F
思路:这题白给,照着模拟就行
/* Author: 张皓南 Result: AC Submission_id: 2508597 Created at: Fri Apr 17 2020 20:49:24 GMT+0800 (China Standard Time) Problem_id: 3256 Time: 552 Memory: 9316 */
#include <stdio.h>
#include<string.h>
int h,w,m,i,j,x,y;
int jv1[1005][1005];
int jv2[15][15];
int jv3[1005][1005];
int main(){
scanf("%d%d%d",&h,&w,&m);
for(i=1;i<=h;i++){
for(j=1;j<=w;j++){
scanf("%d",&jv1[i][j]);
}
}
for(i=1;i<=m;i++){
for(j=1;j<=m;j++){
scanf("%d",&jv2[i][j]);
}
}
for(x=1;x<=h-m+1;x++){
for(y=1;y<=w-m+1;y++){
for(i=1;i<=m;i++){
for(j=1;j<=m;j++){
jv3[x][y]+=jv1[x+i-1][y+j-1]*jv2[i][j];
}
}
}
}
for(x=1;x<=h-m+1;x++){
for(y=1;y<=w-m+1;y++){
printf("%d ",jv3[x][y]);
}
printf("\n");
}
return 0;
}
G
思路:爱地魔力转圈圈~~(模拟
/* Author: 张皓南 Result: AC Submission_id: 2508123 Created at: Fri Apr 17 2020 20:40:26 GMT+0800 (China Standard Time) Problem_id: 3195 Time: 10 Memory: 1772 */
#include <stdio.h>
#include<string.h>
char a[105][105],laji;
int n,i,j;
int xx,yy,x,y,s;
int vis[105][105];
char zhn[105][105];
int main(){
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%s",a[i]);
for(i=1;i<=n;i++){
for(j=0;j<n;j++){
zhn[i][j+1]=a[i][j];
}
}
i=1,j=1;
while(s!=n*n){
while(j<=n&&vis[i][j]==0){
if(zhn[i][j]>='a'&&zhn[i][j]<='z') printf("%c",zhn[i][j]);
vis[i][j]=1;
s++;j++;
}
j--;i++;
while(i<=n&&vis[i][j]==0){
if(zhn[i][j]>='a'&&zhn[i][j]<='z') printf("%c",zhn[i][j]);
vis[i][j]=1;
s++;
i++;
}
i--;j--;
while(j>0&&vis[i][j]==0){
if(zhn[i][j]>='a'&&zhn[i][j]<='z') printf("%c",zhn[i][j]);
vis[i][j]=1;
s++;j--;
}
j++;i--;
while(i>0&&vis[i][j]==0){
if(zhn[i][j]>='a'&&zhn[i][j]<='z')printf("%c",zhn[i][j]);
vis[i][j]=1;
s++;i--;
}
i++;j++;
}
printf("\n");
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
vis[i][j]=0;
s=0;
i=1,j=1;
while(s!=n*n){
while(i<=n&&vis[i][j]==0){
if(zhn[i][j]>='A'&&zhn[i][j]<='Z') printf("%c",zhn[i][j]);
vis[i][j]=1;
s++;
i++;
}
i--;j++;
while(j<=n&&vis[i][j]==0){
if(zhn[i][j]>='A'&&zhn[i][j]<='Z') printf("%c",zhn[i][j]);
vis[i][j]=1;
s++;j++;
}
j--;i--;
while(i>0&&vis[i][j]==0){
if(zhn[i][j]>='A'&&zhn[i][j]<='Z')printf("%c",zhn[i][j]);
vis[i][j]=1;
s++;i--;
}
i++;j--;
while(j>0&&vis[i][j]==0){
if(zhn[i][j]>='A'&&zhn[i][j]<='Z') printf("%c",zhn[i][j]);
vis[i][j]=1;
s++;j--;
}
j++;i++;
}
return 0;
}
H
思路:设定两个变量作为头标记和尾标记(尾标记好像没用的说
然后碰到字母就往前扫,碰到不是字母的就从当前位置输出到头标记
(尾标记确实没用QWQ)
/* Author: 张皓南 Result: AC Submission_id: 2510291 Created at: Fri Apr 17 2020 22:04:25 GMT+0800 (China Standard Time) Problem_id: 3264 Time: 43 Memory: 1816 */
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char zhn[120005];
int n;
int ans,i,j,tou,wei,k;
int main(){
scanf("%d",&n);
while (getchar() != '\n');
for(i=1;i<=n;i++){
memset(zhn,0,sizeof(zhn));
gets(zhn);
int len=strlen(zhn);
tou=wei=-1;
printf("Case #%d: ",i);
for(j=0;j<len;j++){
if((zhn[j]>='A'&&zhn[j]<='Z')||(zhn[j]>='a'&&zhn[j]<='z')){
if(tou==wei) {
tou=j;
if((zhn[j+1]>='A'&&zhn[j+1]<='Z')||(zhn[j+1]>='a'&&zhn[j+1]<='z')) continue;
else{
if(zhn[j]=='a'||zhn[j]=='e'||zhn[j]=='i'||zhn[j]=='o'||zhn[j]=='u')printf("%c",(char)(zhn[j]-32));
else if(zhn[j]=='A'||zhn[j]=='E'||zhn[j]=='I'||zhn[j]=='O'||zhn[j]=='U') printf("%c",zhn[j]);
else if(zhn[j]>='A'&&zhn[j]<='Z')printf("%c",(char)(zhn[j]+32));
else printf("%c",zhn[j]);
tou=wei=j;
}
}
else{
if((zhn[j+1]>='A'&&zhn[j+1]<='Z')||(zhn[j+1]>='a'&&zhn[j+1]<='z')) continue;
else{
for(k=j;k>=tou;k--){
if(zhn[k]=='a'||zhn[k]=='e'||zhn[k]=='i'||zhn[k]=='o'||zhn[k]=='u')printf("%c",(char)(zhn[k]-32));
else if(zhn[k]=='A'||zhn[k]=='E'||zhn[k]=='I'||zhn[k]=='O'||zhn[k]=='U') printf("%c",zhn[k]);
else if(zhn[k]>='A'&&zhn[k]<='Z')printf("%c",(char)(zhn[k]+32));
else printf("%c",zhn[k]);
}
tou=wei=j;
}
}
}
else printf("%c",zhn[j]);
}
printf("\n");
}
return 0;
}
I
思路:KMP算法,优秀的字符串匹配算法
为啥出这么多字符串啊
吃饱了撑的叭
感兴趣可以学学,我不给讲谢谢,CSDN上都有
/* Author: 张皓南 Result: AC Submission_id: 2513614 Created at: Sat Apr 18 2020 11:16:23 GMT+0800 (China Standard Time) Problem_id: 3257 Time: 4 Memory: 1604 */
#include <stdio.h>
#include <string.h>
char s[1055];
char b[1055];
char zhn[1005];
int nex[1005];
int lenb,i,p,flag,lens,lenzhn,j;
int ti[1005];
void kmp(){
memset(nex,0,sizeof(nex));
nex[0]=0;
for(i=1,p=0;i<lenb;i++){
while(p>0&&b[i]!=b[p]) p=nex[p-1];
if(b[i]==b[p]) p++;
nex[i]=p;
}
return ;
}
int main(){
gets(s);
gets(b);
gets(zhn);
lenb=strlen(b);
lens=strlen(s);
lenzhn=strlen(zhn);
while(s[lens-1]==' '||s[lens-1]=='\n'||s[lens-1]=='\t'||s[lens-1]=='\r') lens--;
while(b[lenb-1]==' '||b[lenb-1]=='\n'||b[lenb-1]=='\t'||b[lenb-1]=='\r') lenb--;
while(zhn[lenzhn-1]==' '||zhn[lenzhn-1]=='\n'||zhn[lenzhn-1]=='\t'||zhn[lenzhn-1]=='\r') lenzhn--;
lens--;
lenb--;
lenzhn--;
kmp();
memset(ti,0,sizeof(ti));
for(i=0,p=0;i<lens;i++){
while(p>0&&s[i]!=b[p]) p=nex[p-1];
if(b[p]==s[i]) p++;
if(p==lenb){
flag=1;
ti[i-lenb+1]=1;
}
}
if(!flag) printf("No Replacement!");
else{
for(i=0;i<lens;i++){
if(ti[i]){
for(j=0;j<lenzhn;j++) printf("%c",zhn[j]);
i+=lenb-1;
}
else printf("%c",s[i]);
}
printf(";");
}
return 0;
}
J
思路:这个题还蛮有意思的哈(为什么做水题会有这么大***哈哈哈哈草)
m是数值大,n是个数多
于是两个明显用不同算法
m的用一个小递推,先把m那行排序,f[i]代表到i这个位置,有f[i]个连续的相同数,随便推一波就可
n<1e3 桶排序,白给的
/* Author: 张皓南 Result: AC Submission_id: 2511435 Created at: Fri Apr 17 2020 23:24:04 GMT+0800 (China Standard Time) Problem_id: 3254 Time: 198 Memory: 1736 */
#include <stdio.h>
#include <string.h>
int n,m,res,num,i,x,num2,res2,tmp,j;
int zhn[1005],lgr[1005];
int f[1005];
int main(){
while(scanf("%d%d",&m,&n)==2){
res=0,num=0;
for(i=1;i<=m;i++) scanf("%d",&zhn[i]),f[i]=1;
for(i=1;i<=m;i++){
for(j=i+1;j<=m;j++){
if(zhn[i]>zhn[j]){
tmp=zhn[i];
zhn[i]=zhn[j];
zhn[j]=tmp;
}
}
}
for(i=2;i<=m;i++) if(zhn[i]==zhn[i-1]) f[i]=f[i-1]+1;
for(i=1;i<=m;i++){
if(f[i]>=num){
res=zhn[i];
num=f[i];
}
}
num2=0;res2=0;
memset(lgr,0,sizeof(lgr));
for(i=1;i<=n;i++){
scanf("%d",&x);
lgr[x]++;
}
for(i=1;i<=1000;i++){
if(lgr[i]>=num2){
num2=lgr[i];
res2=i;
}
}
printf("%d %d\n",res,res2);
}
return 0;
}
K
水题好
/* Author: 张皓南 Result: AC Submission_id: 2506028 Created at: Fri Apr 17 2020 20:00:52 GMT+0800 (China Standard Time) Problem_id: 3139 Time: 4 Memory: 1684 */
#include <stdio.h>
long long jv1[15][15];
long long jv2[15][15];
long long jv3[15][15];
int a1,b1,a2,b2,a3,b3,i,j,k,l;
long long tmp[15][15];
long long zhn[15][15];
int main(){
scanf("%d%d%d%d%d%d",&a1,&b1,&a2,&b2,&a3,&b3);
for(i=1;i<=a1;i++){
for(j=1;j<=b1;j++){
scanf("%lld",&jv1[i][j]);
}
}
for(i=1;i<=a2;i++){
for(j=1;j<=b2;j++){
scanf("%lld",&jv2[i][j]);
}
}
for(i=1;i<=a3;i++){
for(j=1;j<=b3;j++){
scanf("%lld",&jv3[i][j]);
}
}
for(i=1;i<=a1;i++){
for(j=1;j<=b2;j++){
for(k=1;k<=b1;k++){
tmp[i][j]+=jv1[i][k]*jv2[k][j];
}
}
}
for(i=1;i<=a1;i++){
for(j=1;j<=b3;j++){
for(k=1;k<=b2;k++){
zhn[i][j]+=tmp[i][k]*jv3[k][j];
}
}
}
for(i=1;i<=a1;i++){
for(j=1;j<=b3;j++){
printf("%lld ",zhn[i][j]);
}
printf("\n");
}
return 0;
}
L
思路:高精度模板,不过用三进制实现,都一样,模拟即可
里面有几个神奇的函数,想知道自己查,我要吃饭了
/* Author: 张皓南 Result: AC Submission_id: 2514072 Created at: Sat Apr 18 2020 12:03:34 GMT+0800 (China Standard Time) Problem_id: 3268 Time: 274 Memory: 1932 */
#include <stdio.h>
#include <string.h>
char a[10005],b[10005],a1[10005],b1[10005],n[10005];
int s1[20005],s2[10005],c[20005],x,y,l1,l2,i;
int main(){
while(scanf("%s%s",a,b)!=EOF){
x=0,y=0;
memset(c,0,sizeof(c));
memset(s1,0,sizeof(s1));
memset(s2,0,sizeof(s2));
memset(n,0,sizeof(n));
memset(a1,0,sizeof(a1));
memset(b1,0,sizeof(b1));
l1=strlen(a);
l2=strlen(b);
if(a[0]!='-'&&b[0]!='-'){
//两个正数相加
for(i=0;i<l1;i++) s1[l1-i]=a[i]-'0';
for(i=0;i<l2;i++) s2[l2-i]=b[i]-'0';
while(x<=l1||x<=l2){
x++;
c[x]=y+s1[x]+s2[x];
y=c[x]/3;c[x]=c[x]%3;
}
while(c[x]==0&&x>1) x--;
for(i=x;i>=1;i--) printf("%d",c[i]);
printf("\n");
}
else if(a[0]=='-'&&b[0]=='-'){
//两个负数相加
printf("-");
for(i=0;i<l1-1;i++) s1[l1-1-i]=a[i+1]-'0';
for(i=0;i<l2-1;i++) s2[l2-1-i]=b[i+1]-'0';
while(x<=l1-1||x<=l2-1){
x++;
c[x]=y+s1[x]+s2[x];
y=c[x]/3;c[x]=c[x]%3;
}
while(c[x]==0&&x>1) x--;
for(i=x;i>=1;i--) printf("%d",c[i]);
printf("\n");
}
else if(a[0]=='-'){
//第二个减第一个
for(i=0;i<l1-1;i++) a1[i]=a[i+1];
l1--;
if(l2<l1||(l1==l2&&strcmp(b,a1)<0)){
strcpy(n,b);
strcpy(b,a1);
strcpy(a1,n);
printf("-");
}
l1=strlen(a1);
l2=strlen(b);
for(i=0;i<l1;i++) s1[l1-i]=a1[i]-'0';
for(i=0;i<l2;i++) s2[l2-i]=b[i]-'0';
while(x<=l1||x<=l2){
x++;
if(s2[x]<s1[x]){
s2[x]+=3;
s2[x+1]--;
}
c[x]=s2[x]-s1[x];
}
while(c[x]==0&&x>1) x--;
for(i=x;i>=1;i--) printf("%d",c[i]);
printf("\n");
}
else if(b[0]=='-'){
//第一个减第二个
for(i=0;i<l2-1;i++) b1[i]=b[i+1];
l2--;
if(l2>l1||(l1==l2&&strcmp(b1,a)>0)){
strcpy(n,b1);
strcpy(b1,a);
strcpy(a,n);
printf("-");
}
l1=strlen(a);
l2=strlen(b1);
for(i=0;i<l1;i++) s1[l1-i]=a[i]-'0';
for(i=0;i<l2;i++) s2[l2-i]=b1[i]-'0';
while(x<=l1||x<=l2){
x++;
if(s1[x]<s2[x]){
s1[x]+=3;
s1[x+1]--;
}
c[x]=s1[x]-s2[x];
}
while(c[x]==0&&x>1) x--;
for(i=x;i>=1;i--) printf("%d",c[i]);
printf("\n");
}
}
return 0;
}