• 机试(cs,se)


    2017 研究生推免复试机考(计算机系)/ 2017 直升研究生机试

    2017 研究生推免复试机考(计算机系) - ECNU Online Judge        ECNU Online Judge

    3357. 吉吉木的野望 

    Problem #3357 - ECNU Online Judge

    思路

    因为精度就1e-12,所以不需要跑到1e9就通过了

    代码

    1. #include
    2. using namespace std;
    3. #define int long long
    4. signed main()
    5. {
    6. int d,k;cin>>d>>k;long double sum=0;int maxx=1e7;
    7. for(int i=min(maxx,k);i>=1;i--){
    8. sum=1/( (1+(i-1)*d) + sum );
    9. }
    10. cout<setprecision(13)<
    11. sum;
    12. return 0;
    13. }

    3346. 皇后问题

    Problem #3346 - ECNU Online Judge

    我的思路

    问多少个皇后冲突,我记得位运算可做(?),但是我没学

    但是普通的模拟+组合数就可以过了

    代码

    1. #include
    2. using namespace std;
    3. #define int long long
    4. int ha[100005];
    5. int li[100005];
    6. unordered_map<int,int> zsyx;
    7. unordered_map<int,int> yszx;
    8. signed main()
    9. {
    10. int ans=0;
    11. int n;cin>>n;int x,y;
    12. for(int i=0;i
    13. cin>>x>>y;
    14. ha[x]++;li[y]++;
    15. zsyx[x-y]++;
    16. yszx[x+y]++;
    17. }
    18. for(int i=1;i<100001;i++){
    19. ans+=ha[i]*(ha[i]-1)/2;
    20. ans+=li[i]*(li[i]-1)/2;
    21. }
    22. for(auto&q:zsyx)
    23. ans+=q.second*(q.second-1)/2;
    24. for(auto&q:yszx)
    25. ans+=q.second*(q.second-1)/2;
    26. cout<
    27. return 0;
    28. }

    3337. 我认识你

    Problem #3337 - ECNU Online Judge

    思路

    用二进制做,相与为1就是共同好友,用bool装数字,MLE了

    1. #include
    2. using namespace std;
    3. bool g[40001][40001];
    4. int main()
    5. {
    6. int n,m;cin>>n>>m;int x,y;
    7. for(int i=0;i
    8. cin>>x>>y;g[x][y]=1;g[y][x]=1;
    9. }
    10. int q;cin>>q;
    11. for(int i=0;i
    12. int s,t;cin>>s>>t;
    13. int ans=0;
    14. for(int i=1;i<=n;i++){
    15. ans+=g[s][i]&g[t][i];
    16. }
    17. cout<'\n';
    18. }
    19. }

    于是可以用bitset装二进制

    但是只改变了装入方式会TLE

    1. #include
    2. using namespace std;
    3. bitset<40004> g[40001];
    4. int main()
    5. {
    6. int n,m;cin>>n>>m;int x,y;
    7. for(int i=0;i
    8. cin>>x>>y;g[x][y]=1;g[y][x]=1;
    9. }
    10. int q;cin>>q;
    11. for(int i=0;i
    12. int s,t;cin>>s>>t;
    13. int ans=0;
    14. for(int i=1;i<=n;i++){
    15. ans+=g[s][i]&g[t][i];
    16. }
    17. cout<'\n';
    18. }
    19. }

    bitset对于二进制的处理速度很快,所以判断 与 之后1的个数可以用bitset装起来再用count

    代码

    1. #include
    2. using namespace std;
    3. bitset<40004> g[40001];
    4. int main()
    5. {
    6. int n,m;cin>>n>>m;int x,y;
    7. for(int i=0;i
    8. cin>>x>>y;g[x][y]=1;g[y][x]=1;
    9. }
    10. int q;cin>>q;
    11. for(int i=0;i
    12. int s,t;cin>>s>>t;
    13. bitset<40004> ans=(g[s]&g[t]);
    14. cout<count()<<'\n';
    15. }
    16. }

    3338. 双塔问题

    思路

    高度尽量高,木块可以舍弃;2的100次方所以dfs不行

    用3维的dp,第一维是第i个积木,第二维相差高度,第三维放在塔1还是塔2

    代码

    1. #include
    2. using namespace std;
    3. int dp[105][10001][2];//第i个,高度差,放在1还是放在2
    4. int a[105];
    5. int main()
    6. {
    7. int n;cin>>n;int sum=0;
    8. memset(dp,-0x3f,sizeof(dp));
    9. dp[0][0][0]=dp[0][0][1]=0;
    10. for(int i=1;i<=n;i++){cin>>a[i];sum+=a[i];}
    11. sum=sum/2;
    12. for(int i=1;i<=n;i++){//这是第i个
    13. for(int j=0;j<=sum;j++){
    14. for(int k=0;k<2;k++){
    15. if(j>=a[i]&&dp[i-1][j-a[i]][k]>=0)
    16. dp[i][j][k]=max(dp[i][j][k],dp[i-1][j-a[i]][k]+a[i]);
    17. //k高且放在高的
    18. if(j-1][a[i]-j][k]>=0)
    19. dp[i][j][k]=max(dp[i][j][k],dp[i-1][a[i]-j][k]+j);
    20. //k低且放在k,低的变高了,因为抵消了,所以高为j
    21. if(dp[i-1][j+a[i]][k]>=0)
    22. dp[i][j][k]=max(dp[i][j][k],dp[i-1][j+a[i]][k]);
    23. //k低且放在k,高的还是高
    24. if(dp[i-1][j][k]>=0)
    25. dp[i][j][k] = max(dp[i-1][j][k], dp[i][j][k]);//不放积木
    26. }
    27. }
    28. }
    29. cout<<max(dp[n][0][0],dp[n][0][1]);
    30. }

    Problem #3339 - ECNU Online Judge

    Problem #3340 - ECNU Online Judge

    只有个位数的人通过,算了

    *3342. 经典的猜数游戏

    Problem #3342 - ECNU Online Judge

    *做累了做着玩的

    1. #include
    2. using namespace std;
    3. #define int long long
    4. signed main()
    5. {
    6. int l=-1e9,r=1e9;string s;
    7. while(l<=r){
    8. int mid=(l+r)>>1;
    9. cout<
    10. cin>>s;
    11. if(s=="equal")return 0;
    12. else if(s=="big")r=mid-1;
    13. else l=mid+1;
    14. }
    15. }

    3356. 解方程

    思路:应该和exgcd有关,但是没做出来,就暴力循环了,有70分

    1. #include
    2. using namespace std;
    3. #define int long long
    4. signed main()
    5. {
    6. int n,q;cin>>q>>n;int ans=0;
    7. if(q==1){
    8. for(int i=1;i<=n;i++){
    9. if(n%i==0)ans++;
    10. }
    11. cout<
    12. }
    13. else{
    14. bool flag=0;
    15. for(int a = 1;a<=n;a++){
    16. for(int b = 1;b <= n;b++){
    17. for(int x = 1; x<=n;x++){
    18. for(int y = 1;y<=n ;y++){
    19. if(a*x+b*y == n){
    20. flag = 1;//标识这个(a,b)对已经完成使命
    21. ans++;break;
    22. }
    23. else if(a*x+b*y>n) break;//直接跳出循环
    24. }
    25. if(flag==1){flag=0;break;}
    26. }
    27. }
    28. }
    29. cout<
    30. }
    31. return 0;
    32. }

    2017 研究生直升面试机考(软件工程)

    2017 研究生直升面试机考(软件工程) - ECNU Online Judge

    3358. 种水稻

    简单的模拟

    1. #include
    2. using namespace std;
    3. #define int long long
    4. signed main()
    5. {
    6. int T;cin>>T;
    7. while(T--){int ans=0;
    8. int n;cin>>n;
    9. for(int i=0;i
    10. int x;cin>>x;
    11. if(x<=10)ans++;
    12. }
    13. cout<'\n';
    14. }
    15. return 0;
    16. }

    B. 泡咖啡 - 2017 研究生直升面试机考(软件工程) - ECNU Online Judge

    模拟,不做了

    3350. 林吉吉的野望

    排序

    3352 密集数

    就是看数字出现的次数,总和乘次数就可以了

    代码

    1. #include
    2. using namespace std;
    3. #define int long long
    4. int G[16];
    5. signed main()
    6. {G[0]=1,G[1]=1;
    7. for(int i=2;i<16;i++){
    8. G[i]=G[i-1]*2;
    9. }
    10. int T;cin>>T;
    11. while(T--){
    12. int n;cin>>n;int sum=0;
    13. if(n==0){cout<<0<<'\n';continue;}
    14. for(int i=0;i
    15. int x;cin>>x;sum+=x;
    16. }
    17. cout<
    18. }
    19. }

    2018 研究生机试 (计算机系第二批) - ECNU Online Judge

    这个看看之后有没有时间写F题

  • 相关阅读:
    Spring Data中MongoDB文档中的唯一字段
    抖音直播间上人气有API吗
    canvas绘制基本图形——矩形
    前端开发:Vue混入(mixin)的使用
    vscode+unity+Emmylua调试使用教程
    把短信验证码储存在Redis
    如何让脚本在任意地方可执行
    [附源码]java毕业设计企业物资信息管理系统
    详解junit
    Spring Boot + Netty + WebSocket 实现消息推送
  • 原文地址:https://blog.csdn.net/zy98zy998/article/details/133269464