8.19总结今日

今天打到一半网站崩了,所以没能继续打,话说开火车好烦hhh



开火车D题

题意:

有一个n*m的矩阵,上面一共有k*k个蛋糕,让你横向纵向都切k-1刀,问能不能存在一种切法使得切完的所有区域都正好只剩一个蛋糕,如果有,输出切的位置

解法:

由于横竖切互不影响,所以我们分开考虑这两部分,先算出每一行(列)有的蛋糕总数,然后每k个切一次,看看能不能

 1 #include<cstdio>
 2 using namespace std;
 3 const int maxn = 200 + 5;
 4 int g[maxn][maxn];
 5 int row[maxn], col[maxn];
 6 int ansr[maxn], ansc[maxn];
 7
 8 int main() {
 9     int n, m, k; scanf("%d%d%d", &n, &m, &k);
10     for (int i = 0; i < n; i++)
11         for (int j = 0; j < m; j++)
12             scanf("%1d", &g[i][j]);
13
14     //处理每一列
15     for (int j = 0; j < m; j++)
16         for (int i = 0; i < n; i++)
17             row[j] += g[i][j];
18
19     int now = 0, cnt = 0, flag = 1;
20     for (int j = 0; j < m; j++) {
21         now += row[j];
22         if (now < k)continue;
23         else if (now == k) { now = 0, ansr[cnt++] = j; }
24         else if (now > k) { flag = false; break; }
25     }
26     if (!flag) { printf("NO\n"); return 0; }
27
28     //处理每一行
29     for (int i = 0; i < n; i++)
30         for (int j = 0; j < m; j++)
31             col[i] += g[i][j];
32
33     now = 0, cnt = 0, flag = 1;
34     for (int i = 0; i < n; i++) {
35         now += col[i];
36         if (now < k)continue;
37         else if (now == k) { now = 0, ansc[cnt++] = i; }
38         else if (now > k) { flag = false; break; }
39     }
40     if (!flag) { printf("NO\n"); return 0; }
41
42     //如果可以的话
43     printf("YES\n");
44     printf("%d", ansc[0]+1);
45     for (int i = 1; i < k-1; i++)printf(" %d", ansc[i]+1);
46     printf("\n%d", ansr[0]+1);
47     for (int i = 1; i < k-1; i++)printf(" %d", ansr[i]+1);
48     printf("\n");
49
50     return 0;
51 }


洛谷P1062

题意:

给出一个多项式的各个项的系数,输出这个多项式

解法:

超tm细心的模拟,竟然调了这么长时间,简直了

 1 #include<iostream>
 2 using namespace std;
 3
 4 int main() {
 5     int n; cin >> n;
 6     int cnt = n, flag = 0, flag2 = 0;
 7     for (int i = 0; i <= n; i++,cnt--) {
 8         int coe; cin >> coe;
 9         if (coe==0)continue;
10         if (i != n)flag2 = 1;
11         if (flag && coe > 0 && i != 0 && flag2)cout << "+";
12         if (i == 0) {
13             if (coe == -1)cout << "-";
14             else if (coe != 1)cout << coe;
15             cout << "x^" << cnt;
16             flag = 1;
17             continue;
18         }
19         else if (i == n) cout << coe, flag = 1;
20         else if (i == n - 1) {
21             if (coe == -1)cout << "-";
22             else if (coe != 1)cout << coe;
23             cout << "x";
24             flag = 1;
25         }
26         else {
27             if (coe == -1)cout << "-";
28             else if (coe != 1)cout << coe;
29             cout << "x^" << cnt;
30             flag = 1;
31         }
32     }
33     if (!flag)cout << 0;
34     cout << endl;
35     return 0;
36 }


Uva1635

题意:

给定n个数a1,a2····an,依次求出相邻两个数值和,将得到一个新数列,重复上述操作,最后结果将变为一个数,问这个数除以m的余数与那些数无关?

例如n=3,m=2时,第一次得到a1+a2,a2+a3,再求和得到a1+2*a2+a3,它除以2的余数和a2无关。1=<n<=10^5, 2=<m<=10^9

解法:

将所有的加法过程列出来可以得到,n个数合并成1个数需要n-1步,且最后的表达式写成初始项相加的形式 每一项的系数恰好就是一个二项式系数。

问除以m的余数与那些数无关,其实就是问这些因子中哪些是m的倍数。我们还是用分解m质因子的方法,将m的质因子全部先分解出来,然后遍历每个二项式系数,看他们能否整除这些质因子(如果这个二项式系数改写成质因子的幂次形式,的这个幂小于m中的这个幂,就不行) 。

除此之外还要学习的就是怎么计算这个幂次,尤其是被除数为分数的时候,分子的幂次的贡献为正,分母为负

 1 #include<cstdio>
 2 #include<vector>
 3 #include<cstring>
 4 using namespace std;
 5 int vis[100000 + 5];
 6
 7 int work_quality_factor(int n, int quality_fac[], int frequency[])
 8 {//n是待分解的数,quality_fac[]会存放它包含的质因子,而frequency[]存放对应次数
 9  //如q_f[k]=7,fre[k]=2就表示质因数分解后里面包含有7,且次数是2
10  //函数返回有几种质因子,比如分解了25就返回1,分解28返回2
11     int res, temp, i;
12     res = 0;
13     temp = n;
14     for (i = 2; i*i <= temp; i++)
15         if (temp%i == 0)
16         {
17             quality_fac[res] = i;
18             frequency[res] = 0;
19             while (temp%i == 0)
20             {
21                 temp = temp / i;
22                 frequency[res]++;
23             }
24             res++;
25         }
26     if (temp > 1)
27     {
28         quality_fac[res] = temp;
29         frequency[res++] = 1;
30     }
31     return res;
32 }
33
34 int main() {
35     int n, m;
36     while (scanf("%d%d", &n, &m) != EOF) {
37         n--;
38         memset(vis, 0, sizeof(vis));
39         int fac[100], frq[100];
40         int primenum = work_quality_factor(m, fac, frq);
41
42         for (int i = 0; i < primenum; i++) {
43             int min_e = frq[i], x, e = 0;
44             // c(n,k)=c(n,k-1)*(n-k+1)/k
45             for (int k = 1; k < n; k++) {
46                 //分成上下两部分除,上面的幂次的贡献为正,下面为负
47                 x = n - k + 1;
48                 while (x%fac[i]==0) { x /= fac[i]; e++; }
49                 x = k;
50                 while (x%fac[i]==0) { x /= fac[i]; e--; }
51                 if (e < min_e)vis[k] = 1;
52             }
53         }
54
55         vector<int>ans;
56         for (int i = 1; i < n; i++)
57             if (!vis[i])ans.push_back(i + 1);
58         printf("%d\n", ans.size());
59         if (!ans.empty()) {
60             printf("%d", ans[0]);
61             for (int i = 1; i < ans.size(); i++)
62                 printf(" %d", ans[i]);
63         }
64         printf("\n");
65     }
66     return 0;
67 }


Uva10820

题意:

给出n,算出小于等于n的所有数中,有几对互质;

解法:

本质就是求有多少个2元组(x,y)满足:1 <= x,y <= n,且x与y互素。

除了(1,1)之外,其他所有的x和y都不相同,我们设x<y的二元组有f(n)个,答案就是2f(n)+1 f(n)=phi(2)+phi(3)+...+phi(n);

 1 #include<cstdio>
 2 #include<cmath>
 3 using namespace std;
 4 const int maxn = 5e4 + 5;
 5 int phi[maxn];
 6
 7 //欧拉函数,求小于n且与n互素的整数个数
 8 int euler_phi(int n) {
 9     int m = (int)sqrt(n + 0.5);
10     int ans = n;
11     for (int i = 2; i <= m; i++) if (n%i == 0) {
12         ans = ans / i*(i - 1);
13         while (n%i == 0)n /= i;
14     }
15     if (n > 1)ans = ans / n*(n - 1);
16     return ans;
17 }
18
19 //求小于n的所有数的欧拉函数值
20 void phi_table(int n, int *phi) {
21     for (int i = 2; i <= n; i++)phi[i] = 0;
22     phi[1] = 1;
23     for (int i = 2; i <= n; i++)if (!phi[i])
24         for (int j = i; j <= n; j += i) {
25             if (!phi[j])phi[j] = j;
26             phi[j] = phi[j] / i*(i - 1);
27         }
28 }
29
30 int main() {
31     int n;
32     while (scanf("%d", &n) && n) {
33         phi_table(n, phi);
34         int ans = 0;
35         for (int i = 2; i <= n; i++) ans += phi[i];
36         printf("%d\n", ans + ans + 1);
37     }
38     return 0;
39 }


Uva1636

题意:

扣一下枪没有响,问再扣一下抢还没有响的概率,这是把左轮枪

解法:

求出00的概率和01串的概率即可,注意这个是环形的左轮枪

 1 #include<cstdio>
 2 #include<cstring>
 3 using namespace std;
 4 char s[1000];
 5
 6 int main() {
 7     while (scanf("%s", s) != EOF) {
 8         int len = strlen(s);
 9         int pr = 0, pc = 0, gun = 0;
10         s[len] = s[0], s[len + 1] = ‘\0‘;
11         len = strlen(s);
12         for (int i = 0; i < len - 1; i++)
13             if (s[i] == ‘0‘&&s[i + 1] == ‘0‘)pr++;
14         for (int i = 0; i < len-1; i++)
15             if (s[i] == ‘0‘)gun++;
16         if (pr*(len-1) > gun*gun)printf("SHOOT\n");
17         else if (pr*(len-1) == gun*gun)printf("EQUAL\n");
18         else printf("ROTATE\n");
19     }
20     return 0;
21 }


Uva580

题意:

一个栈中只能放入U和L,问存在连续3个以上U(危险组合)的个数为几个

解法:

危险情况数 = 总组合数 - 安全情况数

f[i]表示第i个位置是L的方法总数,那么f[i]=f[i-1]+f[i-2]+f[i-3]

 1 #include<cstdio>
 2 using namespace std;
 3 typedef long long ll;
 4 ll f[31];
 5
 6 void generate() {
 7     f[1] = 2, f[2] = 4, f[3] = 7;
 8     for (int i = 4; i <= 30; i++) {
 9         f[i] = f[i - 1] + f[i - 2] + f[i - 3];
10     }
11 }
12
13 int main() {
14     int n;
15     generate();
16     while (scanf("%d", &n) && n) {
17         ll ans = (1 << n);
18         printf("%lld\n", ans - f[n]);
19     }
20     return 0;
21 }

原文地址:https://www.cnblogs.com/romaLzhih/p/9499458.html

时间: 2024-08-06 21:29:51

8.19总结今日的相关文章

suds调用webserive时出现suds.TypeNotFound错误

一.正常调用 1 # coding:utf-8 2 from suds.client import Client 3 4 if __name__ == '__main__': 5 client = Client('http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl') 6 print client.service.getMobileCodeInfo('15116020790', '') 7 8 ## result 9 151160

Python 利用 BeautifulSoup 爬取网站获取新闻流

0. 引言 介绍下 Python 用 Beautiful Soup 周期性爬取 xxx 网站获取新闻流: 图 1 项目介绍 1. 开发环境 Python: 3.6.3 BeautifulSoup:   4.2.0 , 是一个可以从HTML或XML文件中提取数据的Python库* ( BeautifulSoup 的中文官方文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/ ) 2. 代码介绍 实现主要分为三个模块: 1. 计时

今日BBC-4/19

1.随身英语 Would you let your baby sleep in a box? 你愿意让自己的宝宝在盒子里睡觉吗? link 2.地道英语 Me time 私人专属时间 link 3.今日科技新闻 插播: Ecuador earthquake: At least 413 people confirmed dead link At least 413 people are now known to have died in the earthquake that struck Ecu

今日SGU 5.19

SGU 142 题意:给你一个长度为n的串(由a,b组成),让你找出一个串不是n的子串,长度最下 收获:思维题,思路在代码里 #include<bits/stdc++.h> #define de(x) cout<<#x<<"="<<x<<endl; #define dd(x) cout<<#x<<"="<<x<<" "; #define r

今日刷题总结19

共享区域与私有区域 每个进程都有自己的私有虚拟地址空间,避免了受到其他进程的错误读写.但是,通常的c程序几乎都使用到标准库函数,例如printf或者scanf,如果每个进程都要为这些常用库函数在物理内存保留一份拷贝,这样对内存就非常浪费了. 为了解决上述问题,可以将常用库函数设定为共享对象,共享对象在物理内存上只有一份拷贝,多个进程可以把自身虚拟内存的一个区域映射到该共享对象上,这些区域就叫共享区域,如果一个进程在自己的共享区域进行写操作,在其他进程的共享区域内能看到相应的改变,并且这种改变也会

今日提及之动画animation

今天没有说什么内容,只是对HTML5的细节补充,如HTML结构的可以省略到最大的地步 <!DOCTYPE html><meta charset="UTF-8"> <title>animation</title> 这里是放内容的 没有了基本的结构标签了,浏览器会自动帮我们生成. 还有标签的属性的双引号也可以省略: <input type=text> HTML5让我体验到它在最大化的简化标签,使代码量最小化. 还有调试工具的使用,

web前端整套面试题(二)--今日头条面试题

12道单选,7道不定项选择,2道编程题 一.单选(12题) 1.[单选题]在HTML中,( )可以在网页上通过链接直接打开邮件客户端发送邮件. A.<a href=”telnet:[email protected]”>发送邮件</a> B.<a href=”mail:[email protected]”>发送邮件</a> C.<a href=”mailto:[email protected]”>发送邮件</a> D.<a hre

用python+selenium将腾讯首页今日话题的内容自动发表到自己cnblog里

目的:使用pyhton下的unittest单元测试框架并结合selenium的webdriver来实现将腾讯首页的今日话题下的内容自动发表达到自己的cnblog里. 创建QQDailyTopic类继承unittest的TestCase类,setUp()方法用于测试执行前的初始化工作,而最后的tearDown()与setUp()方法相呼应,用于测试执行之后的善后工作.python 3.x 和 selenium 2实现代码如下: 1 #coding=utf-8 2 from selenium imp

今日闪价实例

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="