csp

CCF CSP认证201409-5 拼图

耗尽温柔 提交于 2019-11-28 01:16:12
201409-5 拼图 题目 思路 菜鸟只能混分,听大佬们说要用状态压缩DP。 混分代码(20分) //看作以2*3的矩形填充 # include <cstdio> const int M = 1e9 + 7 ; long long n , m ; long long dp [ 1001 ] = { 1 , 0 } ; long long mypow ( long long a , int b ) { //快速幂 if ( a == 1 ) return b ; long long temp = mypow ( a / 2 , b ) ; if ( a % 2 ) return temp * temp * b % M ; else return temp * temp % M ; } long long CalDp ( int x ) { //b==6的时候dp if ( x == 0 ) return 1 ; if ( x == 1 || x < 0 ) return 0 ; if ( dp [ x ] ) return dp [ x ] ; return dp [ x ] = ( CalDp ( x - 2 ) * 4 + CalDp ( x - 3 ) * 8 ) % M ; } long long dfs ( long long a , int b ) { /

CCF CSP 201312-2 ISBN号码

我是研究僧i 提交于 2019-11-27 20:03:55
问题描述 试题编号: 201312-2 试题名称: ISBN号码 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述   每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。   识别码的计算方法如下:   首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,…,9,再求和,即0×1+6×2+……+2×9=158,然后取158 mod 11的结果4作为识别码。   编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出是正确的ISBN号码。 输入格式   输入只有一行,是一个字符序列,表示一本书的ISBN号码

CCF CSP认证201312-2 ISBN号码

孤者浪人 提交于 2019-11-27 20:03:39
201312-2 ISBN号码 思路 按题目要求模拟就是了,注意识别码’X’的判断。 AC代码如下 # include <cstdio> int main ( ) { char str [ 15 ] ; scanf ( "%s" , str ) ; int i = 0 , sig = 0 , k = 1 ; while ( i < 11 ) { if ( str [ i ] >= '0' && str [ i ] <= '9' ) { sig + = ( str [ i ] - '0' ) * k ; k ++ ; } i ++ ; } sig = sig % 11 ; if ( str [ 12 ] - '0' == sig ) printf ( "Right\n" ) ; else if ( str [ 12 ] == 'X' && sig == 10 ) printf ( "Right\n" ) ; else { if ( sig < 10 ) str [ 12 ] = ( char ) ( sig + '0' ) ; else str [ 12 ] = 'X' ; puts ( str ) ; } return 0 ; } 来源: CSDN 作者: 空空如也2333 链接: https://blog.csdn.net/weixin_43944910/article

CCF CSP试题201312-2 ISBN号码

爷,独闯天下 提交于 2019-11-27 19:55:16
试题编号: 201312-2 试题名称: ISBN号码 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述   每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。   识别码的计算方法如下:   首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,…,9,再求和,即0×1+6×2+……+2×9=158,然后取158 mod 11的结果4作为识别码。   编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出是正确的ISBN号码。 输入格式   输入只有一行,是一个字符序列,表示一本书的ISBN号码

CSP历年真题201312-1-出现次数最多的数

﹥>﹥吖頭↗ 提交于 2019-11-27 19:54:48
问题描述 给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。 输入格式 输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。 输入的第二行有n个整数s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相邻的数用空格分隔。 输出格式 输出这n个次数中出现次数最多的数。如果这样的数有多个,输出其中最小的一个。 样例输入 6 10 1 10 20 30 20 样例输出 10 代码 解题思路: (1)把输入的数字作为数组s的下标,对应数组元素的值是这个数字出现的次数。 (2)最后一个for循环,利用if语句里面的break轻易解决“如果这样的数有多个,输出其中最小的一个。”这个问题。 存在的问题: 这段代码在Dev-C++里面运行没问题,但是在CCF官网提交时老是题型“运行错误”,只能得到90分,请大家指出错误之处,感谢! #include < stdio . h > const int maxn = 1001 ; int s [ maxn ] = { 0 } ; int max = 0 ; int main ( ) { int num , n ; scanf ( "%d" , & num ) ; for ( int i = 0 ; i < num ; i ++ ) { scanf ( "%d" ,

CCF CSP 201903-2 二十四点

放肆的年华 提交于 2019-11-27 16:23:09
#include <bits/stdc++.h> #include <queue> #include <iostream> using namespace std; int main() { int n; string s; cin >> n; queue<int> num; queue<char> op; while(n--) { cin >> s; s.push_back('+'); for(int i = 1; i < s.size(); i+=2) { int t = s[i-1] - '0'; for ( ;i < s.size() && s[i] == 'x' || s[i] == '/'; i += 2) { t = (s[i] == 'x') ? t * (s[i+1]-'0'): t / (s[i+1] - '0'); } num.push(t); op.push(s[i]); } num.push(0); int ans = num.front(); num.pop(); while(!op.empty()) { char opration = op.front(); op.pop(); ans = (opration == '+') ? ans + num.front() : ans - num.front(); num.pop(); } cout <<

CCF CSP 201903-1 小中大

喜夏-厌秋 提交于 2019-11-27 13:31:42
#include <iostream> #include <iomanip> #include <stdio.h> using namespace std; int main() { int N; cin >> N; long* arr = new long[N]; for (int i = 0; i < N; i++) { cin >> arr[i]; } long max = arr[0], min = arr[N-1]; if(max < min) swap(max, min); if(N == 1) cout << arr[0] << " " << arr[0] << " " << arr[0]; float mid; if(N%2) mid = arr[N/2]; else { mid = (arr[N/2-1] + arr[N/2])/2.0; } //cout << mid-int(mid) << endl; cout << max << " "; cout << setiosflags(ios::fixed) << setprecision(mid-(int)mid < 0.01?0:1) << mid << " "; cout << min << endl; return 0; } 学习到的知识: 1、注意极端情况,比如只有一个数 2

HTML注入:利用HTML标签绕过CSP

半腔热情 提交于 2019-11-27 05:39:59
先让我们看看如下这个web应用示例: <html> <meta http?equiv="Content?Security?Policy" content="script?src 'nonce?...' 'unsafe?eval'"> <div id="template_target"></div> <script type="application/template" id="template"> Hello World! 1 + 1 = {{ 1 + 1 }} </script> Your search is <?php echo $_GET['q']; ?> <script nonce="..."> let template = document.getElementById('template'); template_target.innerHTML = template.innerText.replace(/{{(.?)}}/g,eval) </script> </html> 以上这段简单的HTML代码可能反映了现在渗透测试人员经常碰到的模板化Web应用。某些模板内容存储在Web页面中,然后再转换为HTML代码的一部分。上段代码中含有id为 template 的HTML元素内容先被读取,然后再执行 {{}} 括号内的内容,最后在某个单独HTML元素中呈现出来。 Hello

[CCF CSP]最优灌溉201412-4

好久不见. 提交于 2019-11-26 12:44:22
题目: http://118.190.20.162/view.page?gpid=T18 #include <iostream> #include <algorithm> #include <algorithm> using namespace std; int father[1010]; struct Node{ int x,y; int cost; }E[100010]; int find(int x){ return x==father[x]?x:father[x]=find(father[x]); } void merge(int x,int y){ int xx=find(x),yy=find(y); if(xx!=yy) { father[xx]=yy; } } bool cmp(Node a,Node b){ return a.cost<b.cost; } int main() { for(int i=1;i<=1000;i++){ father[i]=i; } int n,m; cin>>n>>m; for(int i=0;i<m;i++){ cin>>E[i].x>>E[i].y>>E[i].cost; } sort(E,E+m,cmp); int sum=0; for(int i=0;i<m;i++){ int x=find(E[i].x),y=find(E[i

CSP历年真题201312-2-ISBN号码

試著忘記壹切 提交于 2019-11-25 18:41:53
问题描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。 识别码的计算方法如下:   首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,…,9,再求和,即0×1+6×2+……+2×9=158,然后取158 mod 11的结果4作为识别码。   编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出是正确的ISBN号码。 输入格式 输入只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)。 输出格式 输出一行,假如输入的ISBN号码的识别码正确,那么输出“Right”,否则,按照规定的格式