53.最大子数组和-力扣(LeetCode)方法:动态规划练了好久的动态规划,终于会写了解法一:暴力求解第一次是这样写的,但是超时了,当个思路看publicstaticvoidmaxSubArray1(int[]nums){intmax=Integer.MIN_VALUE;intlen=nums.length;for(inti=0;i
刷题日记2024-11-20
大萌神Nagato
算法javaleetcode
题目来自力扣560题:和为K的子数组给你一个整数数组nums和一个整数k,请你统计并返回该数组中和为k的子数组的个数。子数组是数组中元素的连续非空序列。示例1:输入:nums=[1,1,1],k=2输出:2示例2:输入:nums=[1,2,3],k=3输出:2暴力循环,时间复杂度O(n²)publicstaticintsubarraySum(int[]nums,intk){intcount=0;f
【leetcode hot 100 128】最长连续序列
longii11
leetcode算法职场和发展
暴力解决:将存如hashmap中,再从min_num到max_num中寻找hashmap中存在的连续数classSolution{publicintlongestConsecutive(int[]nums){//遍历数组,将存如hashmap中Mapmap=newHashMap0){min_num=nums[0];max_num=nums[0];}for(inti=0;imax_num){max_
P10289 [GESP样题 八级] 小杨的旅游
pystraf
洛谷题解算法图论c++数据结构
Description给定一棵nnn个点的树,每条边权值均为111,树上有kkk个关键点,关键点们在000的时间内相互可达,qqq次询问,求s→ts\tots→t的最短路。Analysis考虑暴力建图,则图上共有(n−1+n(n−1)2)(n-1+\frac{n(n-1)}{2})(n−1+2n(n−1))条边,在n,kn,kn,k均为最大的情况下,图上共有大约2×10102\times10^{1
Ozon Tech Challenge 2020 (Div.1 + Div.2, Rated) C. Kuroni and Impossible Calculation(鸽巢原理+数学)
为什么他们cf写的这么快
数学
题目链接思路:首先我们都明白一个式子就是如果(a-b)%m0,那么我们是不是都知道a%mb%m,又因为如果n>m的话%m的取值就在【0,999】内,也就是肯定会存在两个数是重合的(这就是鸽巢原理),那么n大于m的时候%m不就是0了,剩下的暴力就行了。#includeusingnamespacestd;typedeflonglongll;constintmaxn=2e5+1;constllinf=1
【leetcode hot 100 11】移动零
longii11
leetcode算法职场和发展
一、暴力解法:两个for循环,外层循环遍历所有可能的左边界,内层循环遍历所有可能的右边界classSolution{publicintmaxArea(int[]height){intmax_area=0;for(inti=0;iarea?max_area:area;}}returnmax_area;}}错误分析:当涉及的数组较大时,会超出时间限制双指针:一个指向数组的头部,一个指向数组的尾部,然后
第十二届蓝桥杯模拟赛(第三期)
削皮去子吃草莓
蓝桥杯算法
第十二届蓝桥杯模拟赛(第三期)无脑暴力有错误望指正问题描述给定一个矩阵M,由n行m列组成,第i行第j列值为M[i][j]。定义矩阵M的重量为矩阵中所有元素的和,几位weight(M)请找到矩阵左上角的一个子矩阵S(矩阵的前r行中的前c列组成),使得这个子矩阵的重量的两倍最接近矩阵M重量。即|2weight(S)-weight(M)|最小。如果有多个子矩阵满足条件,请找出面积r*c最小的一个。如果仍
基于特征提取的方法实现对心室视频的追踪
阿蛋会代码
音视频python开发语言opencv目标检测计算机视觉
一、特征提取的方法本代码实现了一套基于计算机视觉的心脏运动定量分析系统,通过特征点追踪技术对超声心动图视频进行动态解析。核心技术采用ORB(OrientedFASTandRotatedBRIEF)特征检测算法,在每帧图像中提取具有旋转不变性的显著斑点特征,构建包含位置和方向信息的特征描述子。通过暴力匹配器(BFMatcher)进行跨帧特征点匹配,结合汉明距离阈值筛选出可信度高的空间对应点对。系统以
LeetCode详解之如何一步步优化到最佳解法:14. 最长公共前缀
杰瑞学AI
LeetCode代码优化职业发展leetcode算法职场和发展面试性能优化数据结构python
LeetCode详解系列的总目录(持续更新中):LeetCode详解之如何一步步优化到最佳解法:前100题目录(更新中...)-CSDN博客LeetCode详解系列的上一题链接:LeetCode详解之如何一步步优化到最佳解法:13.罗马数字转整数-CSDN博客目录14.最长公共前缀解法1:暴力解法代码解法性能解法分析解法2:最终版代码解法性能解法分析14.最长公共前缀本题题目链接:14.最长公共前
【洛谷 P8716】[蓝桥杯 2020 省 AB2] 回文日期 题解(闰年计算+暴力枚举+字符串)
HEX9CF
AlgorithmProblems蓝桥杯职场和发展算法
[蓝桥杯2020省AB2]回文日期题目描述2020年春节期间,有一个特殊的日期引起了大家的注意:2020年2月2日。因为如果将这个日期按yyyymmdd的格式写成一个888位数是20200202,恰好是一个回文数。我们称这样的日期是回文日期。有人表示20200202是“千年一遇”的特殊日子。对此小明很不认同,因为不到2年之后就是下一个回文日期:20211202即2021年12月2日。也有人表示20
用Python实现两数之和(python)
南有芙蕖
数据结构
用Python实现两数之和给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定nums=[2,7,11,15],target=9因为nums[0]+nums[1]=2+7=9所以返回[0,1]方法一、暴力解法:暴力法很简单,遍历每个元素x,并查找是否
两数之和(Python)
QRSN
算法刷题算法数据结构pythonleetcode
目录题目描述解题方法解法一:暴力枚举思路复杂度解法二:哈希表思路复杂度题目描述难度:简单给定一个整数数组nums和一个目标值target,要求在数组nums中找出两个数,使它们的和等于目标值target。并返回这两个数在数组中的索引。例如,给定nums=[2,7,11,15],target=9,因为nums[0]+nums[1]=2+7=9,所以应该返回[0,1]。解题方法解法一:暴力枚举clas
AT_arc100_c [ARC100E] Or Plus Max 暴力 + 打表(附优化思路)
Unwaretle
c语言开发语言
题目大意一个长度为500000(5*10**5),起始下标为1,初始值为0的数组,进行q次询问,每次询问有两张情况:1.下标为x的数加上y2.查询下标i满足(i%x)==y的数组元素的和。题目分析对于这类区间查询,可以先试试暴力,对于第一类查询,直接模拟,在数组的对应下标位置加y;对于第二类查询,在[1,500000]的区间内暴力枚举每一个(i%x)==y的值,然后输出它们的和。但显然,会导致超时
二分模板题
Cow_2024
算法模板算法
题目传送门主要思路:暴力会tlen的3次方了然后二分可以找中间然后去二分枚举两边最后结果ans+=a小于它的数*c大于它的数注意要判断是否符合条件即如果a的小于它的数还大于它就不成立或者c的数小于它也不成立结果要注意转longlongans+=(longlong)tp1*tp2;int->longlong#includeusingnamespacestd;intn;inta[100009],b[1
网络安全之攻防笔记--通用安全漏洞SQL注入&sqlmap&Oracle&mongodb&DB2
Dawndddddd
web安全笔记安全sql
通用安全漏洞SQL注入&sqlmap&Oracle&mongodb&DB2数据库类型ACCESS特性没数据库用户没数据库权限没数据库查询参数没有高权限注入说法暴力猜解,借助字典得到数据注入方式联合注入偏移注入表名列名猜解不到偏移注入MySQL低权限常规注入高权限常规注入文件读取load_file文件写入intooutfile权限原因&判断代码连接用户决定查询函数user()其他database()
网络安全——信息收集
1op
网络安全
一.资产收集对于目标的资产收集有域名,ip,邮箱,管理员,网站源码,网站架构1.域名通过网站收集的子域名和whois信息和在线子域名爆破2.ipip主要通过域名解析ip,对于主ip可进行ipc段扫描3.网站源码可从github搜寻,通过网站的前期查询了解是否使用cms二.常见端口服务利用●FTP(21/TCP)默认用户名密码anonymous:anonymous暴力破解密码●SSH(22/TCP)
【算法】初等数论
非 白
算法开发语言java
初等数论模取余,遵循尽可能让商向0靠近的原则,结果的正负和左操作数相同取模,遵循尽可能让商向负无穷靠近的原则,结果的正负和右操作数相同7/(-3)=-2.3,产生了两个商-2和-3,取余语言中取-2,导致余数为1;取模语言中取-3,导致余数为-2java中%是取余幂1、暴力幂思想:直接将a连续乘以b遍时间复杂度:O(n)空间复杂度:O(1)//求a^bpubliclongpow(inta,intb
【Day25 LeetCode】贪心Ⅲ
银河梦想家
leetcode算法
一、贪心Ⅲ1、加油站134这道题直接想法是采用二重循环暴力搜索,简单粗暴但是会超时,是因为以每个点为起点最坏的情况可能都要遍历完全部的序列,有大量重复的操作,那有没有优化的地方呢?有一个结论:如果以iii位置出发最远可达jjj位置,那么在在这段区间里的任意一点出发都不可能达到比jjj位置更远的地方。反证法可以得出。可以通过这个结论避免大量重复搜索,每个位置只会经过一次。代码如下:classSolu
前端防重复请求终极方案:从Loading地狱到精准拦截的架构升级
前端御书房
JavaScript前端javascript
痛点场景:老板亲自督查的紧急需求某日收到线上预警:用户通过脚本0.5秒内狂点200次领券按钮,导致:服务端资源被击穿数据库产生脏数据前端弹出上百个错误提示老板要求:48小时内实现前端全局防重复请求技术难点:存量系统500+接口无法逐个改造需兼容文件上传等特殊场景不能影响现有Loading交互体系一、方案演进:从青铜到王者的三级跳方案1️⃣:暴力Loading法(新手村方案)//请求拦截器axios
MD5解密为什么不能成功(解密算法)
浪九天
算法Javajava算法
MD5解密为什么不能成功(解密算法)首先MD5的密文数量36的32次方;不加盐,不迭代,A-Z,a-z,0-9,8-16位密码,计算量:62的8次方至62的16次方工具类暴力算法结合数据库实现补充说明(原因)生成密文的工具类packagecom.decrypt;importorg.apache.shiro.crypto.hash.SimpleHash;publicclassDecyrpt{priv
【洛谷】P8713 [蓝桥杯 2020 省 A2] 填空问题 的题解
ZH_qaq
洛谷题解蓝桥杯c++算法
【洛谷】P8713[蓝桥杯2020省A2]填空问题的题解传送门A:门牌制作思路这题没什么好说的,就直接暴力枚举就行。代码#include#defineendl"\n"usingnamespacestd;typedeflonglongll;typedefunsignedlonglongull;namespacefastIO{inlineintread(){registerintx=0,f=1;reg
数据结构与算法----枚举与模拟
王嘉俊705
算法算法C++数据结构
枚举与模拟基本概念枚举定义:通过系统性地遍历所有可能的候选解,逐一验证是否满足问题条件的算法策略特点:实现简单,但需注意时间复杂度,常通过剪枝优化效率适用场景:解空间有限、问题维度较低(一般循环嵌套不超过3层)与暴力法的关系:是暴力法的具体实现形式,但可通过合理剪枝提升效率模拟定义:按照问题描述的规则逐步实现操作过程的算法策略特点:注重代码实现的细节把控,常需处理边界条件分类:直接模拟:完全按题意
2016年2月小记录
weixin_30485799
开发工具
2.2发现自己bzoj第一版屯了不少题,就先A几道吧。bzoj1016:[JSOI2008]最小生成树计数,就是kruskal求出最小生成树后暴力一下就行了,其实不知道为什么可以过,反正就是可以过。bzoj1007:[HNOI2008]水平可见直线这题的结论太强了,按斜率排序,维护一个栈,判断交点就行啦,然后被卡精度了,不过这题idea特别好bzoj1011:[HNOI2008]遥远的行星这题就是
Java数据结构与算法(买卖股票的最佳时机二贪心算法)
盘门
java数据结构与算法实战java开发语言
前言买卖股票最佳时机二,此时不限次数的买卖的要求获得的利益最大化。暴力算法依旧可行,可以参考之前的练习。.-力扣(LeetCode)贪心算法原理参考:Java数据结构与算法(盛水的容器贪心算法)-CSDN博客实现原理1.定义最大利润res和下标前值pre。2.下标移动比较当前股票值prices[i]与前值大小,前值小于当前值则加入利润res。3.随着下标移动前值更新。具体代码实现classSolu
枚举算法刷题笔记【蓝桥杯】
call me by ur name
算法刷题笔记算法
枚举枚举算法是我们在日常中使用到的最多的一个算法,它的核心思想就是:枚举所有的可能。枚举法的本质就是从所有候选答案中去搜索正确的解,使用该算法需要满足两个条件:(1)可预先确定候选答案的数量;(2)候选答案的范围在求解之前必须有一个确定的集合。枚举算法简单粗暴,他暴力的枚举所有可能,尽可能地尝试所有的方法。虽然枚举算法非常暴力,而且速度可能很慢,但确实我们最应该优先考虑的!因为枚举法变成实现最简单
分享100个最新免费的高匿HTTP代理IP
mcj8089
代理IP代理服务器匿名代理免费代理IP最新代理IP
推荐两个代理IP网站:
1. 全网代理IP:http://proxy.goubanjia.com/
2. 敲代码免费IP:http://ip.qiaodm.com/
120.198.243.130:80,中国/广东省
58.251.78.71:8088,中国/广东省
183.207.228.22:83,中国/
mysql高级特性之数据分区
annan211
java数据结构mongodb分区mysql
mysql高级特性
1 以存储引擎的角度分析,分区表和物理表没有区别。是按照一定的规则将数据分别存储的逻辑设计。器底层是由多个物理字表组成。
2 分区的原理
分区表由多个相关的底层表实现,这些底层表也是由句柄对象表示,所以我们可以直接访问各个分区。存储引擎管理分区的各个底层
表和管理普通表一样(所有底层表都必须使用相同的存储引擎),分区表的索引只是
JS采用正则表达式简单获取URL地址栏参数
chiangfai
js地址栏参数获取
GetUrlParam:function GetUrlParam(param){
var reg = new RegExp("(^|&)"+ param +"=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if(r!=null
怎样将数据表拷贝到powerdesigner (本地数据库表)
Array_06
powerDesigner
==================================================
1、打开PowerDesigner12,在菜单中按照如下方式进行操作
file->Reverse Engineer->DataBase
点击后,弹出 New Physical Data Model 的对话框
2、在General选项卡中
Model name:模板名字,自
logbackのhelloworld
飞翔的马甲
日志logback
一、概述
1.日志是啥?
当我是个逗比的时候我是这么理解的:log.debug()代替了system.out.print();
当我项目工作时,以为是一堆得.log文件。
这两天项目发布新版本,比较轻松,决定好好地研究下日志以及logback。
传送门1:日志的作用与方法:
http://www.infoq.com/cn/articles/why-and-how-log
上面的作
新浪微博爬虫模拟登陆
随意而生
新浪微博
转载自:http://hi.baidu.com/erliang20088/item/251db4b040b8ce58ba0e1235
近来由于毕设需要,重新修改了新浪微博爬虫废了不少劲,希望下边的总结能够帮助后来的同学们。
现行版的模拟登陆与以前相比,最大的改动在于cookie获取时候的模拟url的请求
synchronized
香水浓
javathread
Java语言的关键字,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。当两个并发线程访问同一个对象object中的这个加锁同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。然而,当一个线程访问object的一个加锁代码块时,另一个线程仍然
maven 简单实用教程
AdyZhang
maven
1. Maven介绍 1.1. 简介 java编写的用于构建系统的自动化工具。目前版本是2.0.9,注意maven2和maven1有很大区别,阅读第三方文档时需要区分版本。 1.2. Maven资源 见官方网站;The 5 minute test,官方简易入门文档;Getting Started Tutorial,官方入门文档;Build Coo
Android 通过 intent传值获得null
aijuans
android
我在通过intent 获得传递兑现过的时候报错,空指针,我是getMap方法进行传值,代码如下 1 2 3 4 5 6 7 8 9
public
void
getMap(View view){
Intent i =
apache 做代理 报如下错误:The proxy server received an invalid response from an upstream
baalwolf
response
网站配置是apache+tomcat,tomcat没有报错,apache报错是:
The proxy server received an invalid response from an upstream server. The proxy server could not handle the request GET /. Reason: Error reading fr
Tomcat6 内存和线程配置
BigBird2012
tomcat6
1、修改启动时内存参数、并指定JVM时区 (在windows server 2008 下时间少了8个小时)
在Tomcat上运行j2ee项目代码时,经常会出现内存溢出的情况,解决办法是在系统参数中增加系统参数:
window下, 在catalina.bat最前面
set JAVA_OPTS=-XX:PermSize=64M -XX:MaxPermSize=128m -Xms5
Karam与TDD
bijian1013
KaramTDD
一.TDD
测试驱动开发(Test-Driven Development,TDD)是一种敏捷(AGILE)开发方法论,它把开发流程倒转了过来,在进行代码实现之前,首先保证编写测试用例,从而用测试来驱动开发(而不是把测试作为一项验证工具来使用)。
TDD的原则很简单:
a.只有当某个
[Zookeeper学习笔记之七]Zookeeper源代码分析之Zookeeper.States
bit1129
zookeeper
public enum States {
CONNECTING, //Zookeeper服务器不可用,客户端处于尝试链接状态
ASSOCIATING, //???
CONNECTED, //链接建立,可以与Zookeeper服务器正常通信
CONNECTEDREADONLY, //处于只读状态的链接状态,只读模式可以在
【Scala十四】Scala核心八:闭包
bit1129
scala
Free variable A free variable of an expression is a variable that’s used inside the expression but not defined inside the expression. For instance, in the function literal expression (x: Int) => (x
android发送json并解析返回json
ronin47
android
package com.http.test;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import
一份IT实习生的总结
brotherlamp
PHPphp资料php教程php培训php视频
今天突然发现在不知不觉中自己已经实习了 3 个月了,现在可能不算是真正意义上的实习吧,因为现在自己才大三,在这边撸代码的同时还要考虑到学校的功课跟期末考试。让我震惊的是,我完全想不到在这 3 个月里我到底学到了什么,这是一件多么悲催的事情啊。同时我对我应该 get 到什么新技能也很迷茫。所以今晚还是总结下把,让自己在接下来的实习生活有更加明确的方向。最后感谢工作室给我们几个人这个机会让我们提前出来
据说是2012年10月人人网校招的一道笔试题-给出一个重物重量为X,另外提供的小砝码重量分别为1,3,9。。。3^N。 将重物放到天平左侧,问在两边如何添加砝码
bylijinnan
java
public class ScalesBalance {
/**
* 题目:
* 给出一个重物重量为X,另外提供的小砝码重量分别为1,3,9。。。3^N。 (假设N无限大,但一种重量的砝码只有一个)
* 将重物放到天平左侧,问在两边如何添加砝码使两边平衡
*
* 分析:
* 三进制
* 我们约定括号表示里面的数是三进制,例如 47=(1202
dom4j最常用最简单的方法
chiangfai
dom4j
要使用dom4j读写XML文档,需要先下载dom4j包,dom4j官方网站在 http://www.dom4j.org/目前最新dom4j包下载地址:http://nchc.dl.sourceforge.net/sourceforge/dom4j/dom4j-1.6.1.zip
解开后有两个包,仅操作XML文档的话把dom4j-1.6.1.jar加入工程就可以了,如果需要使用XPath的话还需要
简单HBase笔记
chenchao051
hbase
一、Client-side write buffer 客户端缓存请求 描述:可以缓存客户端的请求,以此来减少RPC的次数,但是缓存只是被存在一个ArrayList中,所以多线程访问时不安全的。 可以使用getWriteBuffer()方法来取得客户端缓存中的数据。 默认关闭。 二、Scan的Caching 描述: next( )方法请求一行就要使用一次RPC,即使
mysqldump导出时出现when doing LOCK TABLES
daizj
mysqlmysqdump导数据
执行 mysqldump -uxxx -pxxx -hxxx -Pxxxx database tablename > tablename.sql
导出表时,会报
mysqldump: Got error: 1044: Access denied for user 'xxx'@'xxx' to database 'xxx' when doing LOCK TABLES
解决
CSS渲染原理
dcj3sjt126com
Web
从事Web前端开发的人都与CSS打交道很多,有的人也许不知道css是怎么去工作的,写出来的css浏览器是怎么样去解析的呢?当这个成为我们提高css水平的一个瓶颈时,是否应该多了解一下呢?
一、浏览器的发展与CSS
《阿甘正传》台词
dcj3sjt126com
Part Ⅰ:
《阿甘正传》Forrest Gump经典中英文对白
Forrest: Hello! My names Forrest. Forrest Gump. You wanna Chocolate? I could eat about a million and a half othese. My momma always said life was like a box ochocol
Java处理JSON
dyy_gusi
json
Json在数据传输中很好用,原因是JSON 比 XML 更小、更快,更易解析。
在Java程序中,如何使用处理JSON,现在有很多工具可以处理,比较流行常用的是google的gson和alibaba的fastjson,具体使用如下:
1、读取json然后处理
class ReadJSON
{
public static void main(String[] args)
win7下nginx和php的配置
geeksun
nginx
1. 安装包准备
nginx : 从nginx.org下载nginx-1.8.0.zip
php: 从php.net下载php-5.6.10-Win32-VC11-x64.zip, php是免安装文件。
RunHiddenConsole: 用于隐藏命令行窗口
2. 配置
# java用8080端口做应用服务器,nginx反向代理到这个端口即可
p
基于2.8版本redis配置文件中文解释
hongtoushizi
redis
转载自: http://wangwei007.blog.51cto.com/68019/1548167
在Redis中直接启动redis-server服务时, 采用的是默认的配置文件。采用redis-server xxx.conf 这样的方式可以按照指定的配置文件来运行Redis服务。下面是Redis2.8.9的配置文
第五章 常用Lua开发库3-模板渲染
jinnianshilongnian
nginxlua
动态web网页开发是Web开发中一个常见的场景,比如像京东商品详情页,其页面逻辑是非常复杂的,需要使用模板技术来实现。而Lua中也有许多模板引擎,如目前我在使用的lua-resty-template,可以渲染很复杂的页面,借助LuaJIT其性能也是可以接受的。
如果学习过JavaEE中的servlet和JSP的话,应该知道JSP模板最终会被翻译成Servlet来执行;而lua-r
JZSearch大数据搜索引擎
颠覆者
JavaScript
系统简介:
大数据的特点有四个层面:第一,数据体量巨大。从TB级别,跃升到PB级别;第二,数据类型繁多。网络日志、视频、图片、地理位置信息等等。第三,价值密度低。以视频为例,连续不间断监控过程中,可能有用的数据仅仅有一两秒。第四,处理速度快。最后这一点也是和传统的数据挖掘技术有着本质的不同。业界将其归纳为4个“V”——Volume,Variety,Value,Velocity。大数据搜索引
10招让你成为杰出的Java程序员
pda158
java编程框架
如果你是一个热衷于技术的
Java 程序员, 那么下面的 10 个要点可以让你在众多 Java 开发人员中脱颖而出。
1. 拥有扎实的基础和深刻理解 OO 原则 对于 Java 程序员,深刻理解 Object Oriented Programming(面向对象编程)这一概念是必须的。没有 OOPS 的坚实基础,就领会不了像 Java 这些面向对象编程语言
tomcat之oracle连接池配置
小网客
oracle
tomcat版本7.0
配置oracle连接池方式:
修改tomcat的server.xml配置文件:
<GlobalNamingResources>
<Resource name="utermdatasource" auth="Container"
type="javax.sql.DataSou
Oracle 分页算法汇总
vipbooks
oraclesql算法.net
这是我找到的一些关于Oracle分页的算法,大家那里还有没有其他好的算法没?我们大家一起分享一下!
-- Oracle 分页算法一
select * from (
select page.*,rownum rn from (select * from help) page
-- 20 = (currentPag