【11.13】57のTest
来源:互联网 发布:qq空间克隆软件 编辑:程序博客网 时间:2024/05/05 20:24
Orz 57
考试结果不重要啦
学会了什么才是关键~
愿每个坚持梦想的你都足够坚强
T0
写在正式题解之前
说一下这次考试中出现的问题
①文件操作错误
文件操作写在main函数开头,格式为:
freopen(" ","r",stdin);//空格为输入文件名freopen(" ","w",stdout);//空格为输出文件名
考试结束前,一个个程序打开看是否打对
以及记得:
fclose(stdin);fclose(stdout);
不然有可能无输出
②命名错误
本次三个题目命名分别为:①data.cpp ②std.cpp ③baoli.cpp
命名不是中文……
③文件交错或者没交上
cena使用:安装后右键单击任务栏小地球图标,会有选项
点开即可设置选手文件夹地址
就是告诉它你把程序存在哪个文件夹了
考试结束前看仔细,确定自己交对了文件
选手文件夹中只保留.cpp后缀的文件,不要把.exe或者其他神奇的东西放进去……
④超出内存限制(MLE)
int数组最多三千二百万! 提前算好!看清题目要求的内存限制!!
╭(╯^╰)╮下次谁MLE谁唱歌
⑤运行错误(RE)&&编译错误(CE)
交程序之前在自己电脑上运行一下……至少过个样例QAQ
本机没问题的话,检查自己格式是I64d还是lld,是否符合题目标准
检查是否访问不合法内存,比如a[-1]
比如开了a[233]却访问了a[666];
⑥答案格式错误(PE)
认真读题认真读题认真读题!!!
分清空格和换行!!!
⑦审题错误
虽然你学长学姐们都语文不好……但是这次题面特别良心!!!
都告诉你们了!!!
”(-1)mod(10007) = 10006
数据全为手动构造,请酌情骗分“
没看见的面壁思过╭(╯^╰)╮
看错题了的面壁思过╭(╯^╰)╮
审题失败的面壁思过╭(╯^╰)╮
都知道重要的事情说三遍
那你读题倒是读三遍呀QAQ
QAQ没读懂就再读呀
别当小说看个没完就行……
⑧奇怪的错误
多组数据读入,记得把用到的数组啊答案啊变量啊都清空
崩溃或者栈溢出 递归死循环了QAQ
不知道哪里错了就调试,中间输出也是很管用的
⑨爆零
我为什么写上这个呢……
因为这次考试可以输出-1骗分
不会做没关系
骗分骗不到就要好好思考人生了
骗分技巧://会做就别骗分了,注意细节就好
前提:不是多组数据
输出为yes或者no,选一个输出
能输出-1,就直接输出-1
if(输入为样例) 输出样例答案╮(╯▽╰)╭说不定有分呢2333
数据分点,数据规模有梯度,能做多少做多少,暴力一定打对
根据数据梯度写分段函数,就是判断一下n属于哪个范围然后调用哪里
if(n < 233) baoli();之类的
注意做题顺序,并不是每次考试都保证题目难度递增
就算它递增,对于你来说也不一定
╮(╯▽╰)╭好啦我终于总结完了2333
和当年的我们一样
谁不是这么过来的呢
不怕不怕
一切才刚开始呢233333
T1
使一个矩形满足行列两条对角线的和都为同一个数
不满足输出”-1“;
注意:
1.每块土地能量值>0
所以处理出<=0就可以输出-1了//如果你没打错的话23333╮(╯▽╰)╭
2.n == 1时输出1
3.处理和的时候注意行列对角线之间的区别
比如num[i][j]
同一行则坐标中i相同
同一列则坐标中j相同
对角线呢?
╮(╯▽╰)╭自己画图看呀
//这里存图从1开始
//第一条:num[1][1] num[2][2]…… num[n][n]
//第二条:num[1][n] num[2][n - 1]……num[n][1]
定义某一行为不含未知数(答案)的行
某一列同上x
当前行为含未知数的行
当前列同上x
未知数 = 某一行的和 - 当前行的和
未知数 = 某一列的和 - 当前列的和
然后对角线?
你自己想~~~~嘿嘿嘿
std如下:
//╮(╯▽╰)╭std都不是我写的
#include<iostream>#include<cstdio>using namespace std;typedef long long ll;ll map[600][600],s1[600],s2[600];int main(){ freopen("data.in", "r", stdin); freopen("data.out", "w", stdout); ll n,x,y,sx=0,sy=0,st=0; cin>>n; for(int i=0; i<n; i++) { for(int j=0; j<n; j++) { cin>>map[i][j]; if(map[i][j]==0)x=i,y=j; s1[i]+=map[i][j]; s2[j]+=map[i][j]; } sx+=map[i][i]; sy+=map[i][n-i-1]; } if(x==0)st=s1[1]; else st=s1[0]; bool b=1; if(s1[x]!=s2[y])b=0; if(x!=y&&sx!=st)b=0; if(n-x!=y+1&&sy!=st)b=0; if(b)for(int i=0; i<n; i++) { if(x!=i&&s1[i]!=st) { b=0; break; } if(y!=i&&s2[i]!=st) { b=0; break; } } ll ans=st-s1[x]; if(ans<=0)b=0; if(x==y&&ans+sx!=st)b=0; if(n-x==y+1&&ans+sy!=st)b=0; if(n==1)cout<<1; else if(!b)cout<<-1; else cout<<ans; return 0;}
T2
字符串处理
两个问题:
括号外最长单词长度
括号内单词总数
这就意味着对于括号的细节处理要小心啦
括号内外如何区别?
碰到了左括号不就代表着要进括号里了吗~
发现了右括号不就代表着要到括号外了吗~
下划线?
下划线判断单词数 ans ++;
最后一个单词?
最后一个字符并不一定是下划线,所以最后一个单词很可能会有bug
①特判
②字符串是支持+=的还记得吗
比如 string a = “233”;
string b = “666”;
a += b; cout << a;
然后你会得到233666
所以加个下划线就好了
有多个答案输出的题目请务必注意输出格式!看清楚是换行还是空格!!
附赠std:
//╮(╯▽╰)╭我不生产std,我只是std的搬运工
//Codeforces Round #375 (Div. 2) B#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>using namespace std;const int maxn=20000;char hah[maxn];int l[maxn];int r[maxn];int n;int ans2=0;void haha(int ll,int rr){ for(int i=ll+1;i<rr;) { if(hah[i]=='_') i++; else { ans2++; while(hah[i]!='_'&&i<rr) { i++; } } }}int main(){ freopen("std.in","r",stdin); freopen("std.out","w",stdout); int ans1=0; scanf("%d",&n); int lc=0; int rc=0; for(int i=1;i<=n;i++) { cin>>hah[i]; if(hah[i]=='(') { l[++lc]=i; } if(hah[i]==')') { r[++rc]=i; } } for(int i=1;i<=n;) { if(hah[i]=='_') { i++; } else if(hah[i]=='(') { while(i<=n) { i++; if(hah[i]==')') break; } } else { if(hah[i]==')') i++; int cnt=0; while(hah[i]!='_'&&hah[i]!='('&&i<=n) { i++; cnt++; } ans1=max(ans1,cnt); } } for(int i=1;i<=lc;i++) { haha(l[i],r[i]); } cout<<ans1<<" "; printf("%d",ans2); return 0;}
T3
表达式运算
用两个栈,一个存运算符,一个存数字
具体请参见蓝色课件,这是例题
注意:(-1)mod(10007) = 10006
附赠std:
//╮(╯▽╰)╭课件上那个看不懂的话来问四楼们
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <cstdlib>using namespace std;const long long MAXN = 100000 + 5;const long long P = 10000 + 7;struct dot{ char op; long long l,r; long long num;}tree[MAXN];char s[MAXN];long long n;long long mod(long long x){ return x;}namespace no_X{ bool yes() { for(long long i = 0;i < n;i ++) if(s[i] == 'x') return false; return true; } bool is_a_num(long long l,long long r) { for(long long i = l;i <= r;i ++) if(!isdigit(s[i])) return false; return true; } long long make_num(long long l,long long r) { long long ans = 0; for(long long i = l;i <= r;i ++) ans = ((ans << 1) + (ans << 3) + (s[i] - '0')); return ans; } long long sz = 0; long long build(long long l,long long r) { if(is_a_num(l,r)) { long long x = ++ sz; tree[x].num = make_num(l,r); return x; } long long flag = 0; long long c1 = -1,c2 = -1; for(long long i = l;i <= r;i ++) { switch(s[i]) { case '(':flag ++;break; case ')':flag --;break; case '+':case '-':if(!flag)c1 = i;break; case '*':case '/':if(!flag)c2 = i;break; } } if(c1 < 0)c1 = c2; if(c1 < 0)return build(l + 1,r - 1); long long x = ++sz; tree[x].op = s[c1]; tree[x].l = build(l,c1 - 1); tree[x].r = build(c1 + 1,r); return x; } long long ask(long long x) { if(!tree[x].op) return tree[x].num; long long ans = 0; switch(tree[x].op) { case '+':ans = ask(tree[x].l) + ask(tree[x].r);break; case '-':ans = ask(tree[x].l) - ask(tree[x].r);break; case '*':ans = ask(tree[x].l) * ask(tree[x].r);break; case '/': long long a = ask(tree[x].l); long long b = ask(tree[x].r); if(!b) { puts("10007"); exit(0); } ans = ask(tree[x].l) / ask(tree[x].r); break; } return ans; } void solve() { long long root = build(0,n - 1); printf("%lld\n",ask(root)); }}int main(){ freopen("baoli.in","r",stdin); freopen("baoli.out","w",stdout); gets(s); n = strlen(s); no_X::solve(); fclose(stdin); fclose(stdout); return 0;}
好啦题解写完啦~
还有没听懂没看懂的来问四楼~
什么时候都保证有人
2016NOIP
加油,所有人
愿世界对你温柔以待❤
愿你对生活仍有期待❤
Orz you all
2016.11.13
LOI_summer
- 【11.13】57のTest
- test
- test
- test
- test
- test
- test
- test
- Test
- test
- Test
- test
- test
- test
- test
- test
- test
- test
- 只为这一世,我勇敢地活
- ubuntu linux基本命令- 改变工作目录命令
- 判断点在直线的左右那一侧
- 78系列79系列稳压芯片
- 一些常见异常及解决办法(持续更新)
- 【11.13】57のTest
- struts2面试题
- 软考总结之范式及心得总结
- PHP命名空间(Namespace)的使用详解
- 04_03_Linux
- auto_ptr智能指针
- Java爬虫(3)——拼接url抓取“加载更多”内容
- 软考上午题中的计算题
- C++版本直接插入排序