题目来源:未知,zoj3547,3548
t1
【问题描述】
若干年之后,XJH找工作面试,面试官给了他这样一个题目。
你有一个N*N的回型矩阵,保证N是奇数。
例如,当N=5的时候,矩阵如下:

现在,输入N,M,X,Y,你需要输出对于N*N的回型矩阵,以(X,Y)作为左上角的一个M*M的子矩阵的值。
【输入格式】
一行,N,M,X,Y,保证N是奇数。
【输出格式】
M*M的一个矩阵,表示答案。

【样例输入】
5 4 2 2
【样例输出】
17 18 19 6
24 25 20 7
23 22 21 8
12 11 10 9
【数据范围】
对于100%的数据,N<=1000000,M<=100,1<=X,Y<=N-M+1
听大佬说可以找规律推公式什么的,不过我这种蒟蒻只会最蠢的分类讨论。写的比较长,浪费了1个小时。。。

#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
long long n,m,x,y;
long long ans[105][105];
int main()
{freopen("matrix.in","r",stdin);freopen("matrix.out","w",stdout);scanf("%lld%lld%lld%lld",&n,&m,&x,&y);for(long long i=x;i<=x+m-1;i++){for(long long j=y;j<=y+m-1;j++){if(i<=(n+1)>>1){if(j<=(n+1)>>1){if(i<j){long long a=n-(i-1)*2;long long num=n*n-a*a;ans[i-x][j-y]=num+j-i+1;}else if(i==j){long long a=n-(i-1)*2;long long num=n*n-a*a;ans[i-x][j-y]=num+1;}else{long long a=n-j*2;long long num=n*n-a*a;ans[i-x][j-y]=num-(i-j)+1;}}else{if(i<=n-j+1){long long a=n-(i-1)*2;long long num=n*n-a*a;ans[i-x][j-y]=num+j-i+1;}else{long long a=n-(n-j)*2;long long num=n*n-a*a;num+=a;ans[i-x][j-y]=num+i-(n-j+1);}}}else{if(j<=(n+1)>>1){if(j<=n-i+1){long long a=n-j*2;long long num=n*n-a*a;ans[i-x][j-y]=num-(i-j-1);}else{long long a=n-(n-i)*2;long long num=n*n-a*a;num+=a*2-1;ans[i-x][j-y]=num+i-j;}}else{if(i<=j){long long a=n-(n-j)*2;long long num=n*n-a*a;num+=a*2-1;num-=j-i;ans[i-x][j-y]=num;}else{long long a=n-(n-i)*2;long long num=n*n-a*a;num+=a*2-1;num+=i-j;ans[i-x][j-y]=num;} }}}}for(long long i=0;i<m;i++){for(long long j=0;j<m;j++){printf("%lld",ans[i][j]);if(j!=m-1)printf(" ");else printf("\n");}}return 0;
} 

t2 zoj3547
【问题描述】
又若干年之后,XJH成为了一个上市企业的老板,然而是一个抠门的老板(XJH:???)。
XJH的公司里面有n个员工,编号是1~n。每个人的工资是自己编号的四次方,例如,编号为5的员工,工资就是54=625。
(员工1:???)
然而,XJH觉得工资发的太多了,需要裁员。于是,决定把所有编号和自己互质的员工都裁掉(XJH的编号显然是n,肥水不流外人田)。
现在,问:XJH裁员之后能省多少钱?

【输入格式】
第一行输入t,表示t组数据。
接下来t行,每行一个数字n,表示询问。
【输出格式】
t行,每行一个数字表示答案。
由于答案太大,mod 1,000,000,007 即可。
【样例输入】
2
4
5
【样例输出】
82
354
【样例解释】
Case1: sum=1+3*3*3*3=82
Case2: sum=1+2*2*2*2+3*3*3*3+4*4*4*4=354
【数据范围】
对于30%的数据,n<=106
对于100%的数据,n<=108,t<=100
要算1到n的四次方和,需要先推个公式:
ans(x)=x*(x+1)(x*2+1)(x*x*3+x*3-1)/30.
(要推四次方和要先推二次方的,然后三次方的然后四次方的,具体比如说要算二次方,就列式(n+1)^3-n^3=3*n^2+3*n+1,从n列到1,再把所有式子相加即可).
有了公式就可以分解n然后利用容斥把和n不互质的人的薪水减掉,就是能省下的工资。

#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
bool prime[10005];
long long q[10005],tot,ni,rw=1000000007,num[10005],cnt;
void getpri()
{prime[1]=1;for(long long i=2;i<=10000;i++){if(!prime[i])q[++tot]=i;for(long long j=1;j<=tot&&i*q[j]<=10000;j++){prime[i*q[j]]=1;if(i%q[j]==0)break;}}
}
void getni()
{long long x=1000000005;ni=1;long long a=30;while(x){if(x&1){ni=(ni*a)%rw;}x>>=1;a=(a*a)%rw;}
}
long long calc(long long x)
{return x*(x+1)%rw*(x*2+1)%rw*(x*x*3%rw+x*3-1)%rw*ni%rw;
}
int main()
{long long t,n;scanf("%lld",&t);getpri();getni();//printf("%lld",tot);/*for(long long i=1;i<=tot;i++)printf("%lld ",q[i]);*/ while(t--){scanf("%lld",&n);long long sum=calc(n);//printf("%lld",sum);long long x=n;cnt=0;for(long long i=1;q[i]<=x&&i<=tot;i++){if(x%q[i]==0){num[cnt++]=q[i];while(x%q[i]==0){x/=q[i];    }   }}if(x!=1)num[cnt++]=x;//for(int i=0;i<cnt;i++)//printf("%lld ",num[i]);for(long long s=1;s<(1<<cnt);s++){long long v=1,l=0;for(long long i=0;i<cnt;i++){if((s>>i)&1){v*=num[i];l++;}}if(l&1){sum-=((((((((calc(n/v)%rw)*v)%rw)*v)%rw)*v)%rw)*v)%rw;}else sum+=((((((((calc(n/v)%rw)*v)%rw)*v)%rw)*v)%rw)*v)%rw;}printf("%lld\n",(sum%rw+rw)%rw);}
} 

t3zoj3548
这个题我想出来是二分图匹配,但是现场建点的方式错了,会t飞。正确的操作是这样的:首先可以发现两个块中间夹的那部分如果要涂色就一定把对应的那一行或列一起涂了,这样结果肯定不会更坏。然后再去看行列交点的那些位置,如果有的话就在二分图里把这行和这列连起来。
不过我这份代码把教练的数据都过了,然而交到zoj上就挂了。各位就看个思路吧。如果有好心人路过帮忙查个错就万分感谢了。

#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
int n,m,r,c,t;
char mp[2005][2005];
int sum[2005][2005],hang[2005],lie[2005],g[210][210],link[210],vis[210];
bool dfs(int now)
{for(int i=1;i<=c+1;i++){if(g[now][i]&&!vis[i]){vis[i]=1;if(link[i]==-1||dfs(link[i])){link[i]=now;return 1;}}}return 0;
}
int hungary()
{int ans=0;for(int i=1;i<=r+1;i++){memset(vis,0,sizeof(vis));if(dfs(i))ans++;}return ans;
}
int main()
{while(~scanf("%d%d%d%d%d",&n,&m,&r,&c,&t)){for(int i=1;i<=n;i++){scanf("%s",mp[i]+1);}memset(sum,0,sizeof(sum));for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){sum[i][j]=mp[i][j]-'0'+sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];}}int ans1=99999999;int ans=0;for(int a=1;a<=2000;a++){if(a*r>n||a*c>m)break;if((n-(a*r))%(r+1)==0&&(m-(a*c))%(c+1)==0&&(n-(a*r))/(r+1)==(m-(a*c))/(c+1)){memset(hang,0,sizeof(hang));memset(lie,0,sizeof(lie));memset(g,0,sizeof(g));memset(link,-1,sizeof(link));ans=0;int s=(n-(a*r))/(r+1);if(s>a)continue;if(s==0)continue;for(int i=1;i<=r+1;i++){for(int j=1;j<=c+1;j++){int x1,x2,y1,y2;x1=i*s+(i-1)*a+1;y1=j*s+(j-1)*a+1;x2=i*s+i*a;y2=j*s+j*a;if(i<=r&&j<=c&&sum[x2][y2]-sum[x1-1][y2]-sum[x2][y1-1]+sum[x1-1][y1-1]!=(x2-x1+1)*(x2-x1+1)){ans++;}if(j<=c&&sum[x1-1][y2]-sum[x1-1][y1-1]-sum[x1-1-s][y2]+sum[x1-1-s][y1-1]){if(hang[i]==0){hang[i]=1;ans++;}}if(i<=r&&sum[x2][y1-1]-sum[x1][y1-1-s]-sum[x1-1][y1-1]+sum[x1-1][y1-1-s]){if(lie[j]==0){lie[j]=1;ans++;}}}}//printf("%d %d\n",a,ans);for(int i=1;i<=r+1;i++){if(hang[i])continue;for(int j=1;j<=c+1;j++){if(lie[j])continue;int x1=(i-1)*s+(i-1)*a+1;int y1=(j-1)*(s+a);int x2=i*s+(i-1)*a;int y2=j*s+(j-1)*a;if(sum[x2][y2]-sum[x2][y1-1]-sum[x1-1][y2]+sum[x1-1][y1-1]){g[i][j]=1;}}}printf("%d\n",ans);ans+=hungary();//printf("%d %d\n",a,ans);ans1=min(ans1,ans);}}if(ans1==99999999)printf("-1\n");else printf("%lld\n",(long long)ans1*t);}
}

【zoj 3547】【zoj 3548】8.17模拟赛相关推荐

  1. 9.17模拟赛2.0

    题目来源:清北学堂 天天寄快递 express.in/.out/.cpp [问题描述] 天天暑假时帮别⼈寄送快递,经历了⼀个暑假,天天积累了不少数据, 想对快递公司进⾏⼀下评分,得到快递公司的质量⽔平 ...

  2. 2021/2/17模拟赛

    T1音量调节 一看这数据范围,不就dfs么. #include <bits/stdc++.h> using namespace std; int a[6666],n,beg,maxx,an ...

  3. 2018年10月17日普级B组【模拟赛】

    2018年10月17日普级B组模拟赛2018年10月17日普级B组模拟赛2018年10月17日普级B组模拟赛 第一题--ISBN号码第一题--ISBN号码第一题--ISBN号码 博客链接: https ...

  4. NOIP模拟赛 17.10.10

    初次见面(firstmeet) [题目背景] 雾之湖边,静得可怕. 露米娅出神凝望.黑白连衣裙,像极了绽放的墨黑和洁白的莲.身边的雾之 湖,倒映着血色天空.酒红的双眸,映照一切.低声浅笑,双臂伸直,她 ...

  5. 2020.03.18模拟赛17(第二题)

    2.[GDKOI训练]音乐节拍(mnotes) 题目描述 FJ准备教他的奶牛弹奏一首歌曲,歌曲由N(1<=N<=50,000)种音节组成,编号为1到N,而且一定按照从1到N的顺序进行弹奏, ...

  6. 2020.03.18模拟赛17(第三题)

    3.[GDKOI训练]电视游戏问题(vidgame) 题目描述 农夫约翰的奶牛们游戏成瘾!本来FJ是想要按照陶教授的做法拿她们去电击戒瘾的,可是后来他发现奶牛们玩游戏之后比原先产更多的奶.很明显,这是 ...

  7. EZ 2018 06 17 NOIP2018 模拟赛(十九)

    这次的题目难得的水,但是由于许多哲学的原因,第二题题意表述很迷. 然后是真的猜题意了搞了. 不过这样都可以涨Rating我也是服了. Upt:链接莫名又消失了 A. 「NOIP2017模拟赛11.03 ...

  8. 【模拟赛】10.15—10.17

    背景: 继国庆自闭四联考之后,确实,是很自闭,还做了些比较疯狂的事情,然后顿悟了很多,然后刚知道怎么去努力,刚知道努力的方法和方向就赶快滚回来写博客了,毕竟是在将近考试的时候出现了问题,还是赶快狗回来 ...

  9. 2021年 第12届 蓝桥杯 第4次模拟赛真题详解及小结【Java版】

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

最新文章

  1. win10 IIS(互联网信息服务) 及 外网访问tomcat
  2. pageResponse - 让H5适配移动设备全家(移动端适配)1
  3. 帆软报表等于空的时候不显示_查询结果为空时不显示报表内容
  4. CodeForces 699A Launch of Collider
  5. Sklearn参数详解—GBDT
  6. 前端学习(488):文本标签
  7. 魔法少女小Scarlet(洛谷P4924题题解,C++语言描述)
  8. Bootstrap导航条所支持的组件
  9. 单列变双列css_css – 右对齐双列布局丢失水平滚动条
  10. xnb转png_xnb exporter插件下载
  11. 【流放之路-召唤愤怒狂灵攻略】
  12. 2020科目一考试口诀_2020年驾考科目一考试技巧与口诀
  13. 【U8+】用友U8+16.1不自动删除历史的自动备份文件
  14. 在JS中如何获取时间以及转换时间
  15. STMCubeMX+Proteus仿真DHT11(LCD1602显示)
  16. 解决邮件附件乱码问题
  17. 用 Async 函数简化异步代码
  18. idea 汉化版 自定义类注释与方法注释 解决自定义注解出现红线
  19. 上海交大PMP——职场妈妈的学习干货分享
  20. lsof的安装及使用

热门文章

  1. 在IE浏览器中启用Java Applet扩展
  2. Rockchip Android13 AudioCodecs ES8316调试心得
  3. 互联网医院系统的优势与挑战:现状调研分析
  4. [C++] OpenCasCade空间几何库的模型展现
  5. MySQL百万级数据查询
  6. html语言设计一个网页,HTML语言与网页设计.ppt
  7. 大数据在智慧城市的应用在哪方面
  8. [DL]CCF大数据与计算智能大赛-小样本数据分类任务
  9. Python源码:根据输入的年份得到对应的生肖(要求年份>=1900)
  10. fwrite写文件的问题解析